Faire un 3eme fichier grace a 2 en les concatenant ( script)

Résolu
c2020 Messages postés 22 Date d'inscription   Statut Membre Dernière intervention   -  
mamiemando Messages postés 33769 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour J'ai 2 fichier.txt : quay.txt & registry.txt

_quay.txt qui ressemble a : quay.image.stade : .... : .......

_registry.txt qui ressemble a : registry.image.stade: ........ : .......

J'aimerais regrouper la 1er ligne de quay.txt avec la 1er ligne de registry.txt
Dans un fichier gitlab.txt (sur une même ligne si possible du style <image de quay:1> <image de registry :1> )

_la 2eme ligne de chaque fichier dans gitlab.txt ( si possible en 2eme ligne de gitlab.txt <image de quay:2> <image de registry:2> )

Et ainsi de suite ...

Bien sûr aucune image est numéroté c'était juste pour l'exemple !


Je suis débutant en linux et sa sera mon 1er script :
Pouvez-vous m'aider svp ?

La seule chose que j'arrive a faire c'est de récupérer la 1er ligne de chaque fichier avec :


head -n 1 quay.txt >> gitlab.txt
head -n 1 registry.txt >> gitlab.txt


Je sais c'est pas grand chose ;)
Merci d'avance pour votre aide.
A voir également:

1 réponse

mamiemando Messages postés 33769 Date d'inscription   Statut Modérateur Dernière intervention   7 878
 
Bonjour,

Ce serait plus simple si tu expliquais ce que tu veux faire avec un exemple. Notamment, le contenu des deux fichiers d'entrée n'est pas clair, ni le résultat que tu veux obtenir.

Si j'ai bien compris tu veux lire deux fichiers ligne par ligne et écrire côte à côte les lignes de chaque fichier. Si c'est le cas, que dois-tu faire si les deux fichiers n'ont pas le même nombre de lignes ? Faut-il recopier l'intégralité des deux lignes ?

S'il s'agit de ça, tu peux utiliser par exemple la commande
pr
, comme le montre cet exemple :

pr -m -t quay.txt registry.txt


La commande que tu proposes ne fera pas ce que tu veux, car elle écrit juste la première ligne de
quay.txt
à la suite de
gitlab.txt
, puis la première ligne de
registry.txt
à la suite de
gitlab.txt
. À moins de répéter ce procéder pour chaque ligne des deux fichiers (en incrémentant la ligne à écrire) ça ne marchera pas. De plus, les deux lignes seront écrites sur deux lignes différentes et non côte à côte.

Bonne chance
1
c2020 Messages postés 22 Date d'inscription   Statut Membre Dernière intervention  
 
Le fichier1.txt :


ligue.equipe.stade.psg
ligue.equipe.stade.marseille
ligue.equipe.stade.lyon
ligue.equipe.stade.lille
ligue.equipe.stade.nice
ligue.equipe.stade.renne
ligue.equipe.stade.reims


Le fichier2.txt :


bundesliga.stade.ville.psg
bundesliga.stade.ville.marseille
bundesliga.stade.ville.lyon
bundesliga.stade.ville.lille
bundesliga.stade.ville.nice
bundesliga.stade.ville.renne
bundesliga.stade.ville.reims


Le fichier3.txt :


ligue.equipe.stade.psg bundesliga.stade.ville.psg
ligue.equipe.stade.marseille bundesliga.stade.ville.marseille
ligue.equipe.stade.lyon bundesliga.stade.ville.lyon
ligue.equipe.stade.lille bundesliga.stade.ville.lille
ligue.equipe.stade.nice bundesliga.stade.ville.nice
ligue.equipe.stade.rennes bundesliga.stade.ville.rennes
ligue.equipe.stade.reims bundesliga.stade.ville.reims


Ensuite, je voudrais (grâce à ce
fichier3.txt
) le rentrer dans une variable et une boucle pour pouvoir faire cette affichage, tout ça sur la même ligne si possible.

La ligue 1 comporte : ligue.equipe.stade.psg mais les champion sont : bundesliga.stade.ville.psg 
La ligue 1 comporte : ligue.equipe.stade.marseille mais les champion sont : bundesliga.stade.ville.marseille
La ligue 1 comporte : ligue.equipe.stade.lyon mais les champion sont : bundesliga.stade.ville.lyon


et ainsi de suite .....

Peut-être :

echo " la ligue 1 comporte : $L " " Mais les champion sont : $B "    


Mais je sais pas ce qu'il faut d'autre ou même comment faire la boucle.


Merci d'avance
0
mamiemando Messages postés 33769 Date d'inscription   Statut Modérateur Dernière intervention   7 878 > c2020 Messages postés 22 Date d'inscription   Statut Membre Dernière intervention  
 
As-tu essayé la commande que je t'ai donnée ? Avec ton exemple :

(mando@silk) (~) $ pr -m -t fichier1.txt fichier2.txt
ligue.equipe.stade.psg bundesliga.stade.ville.psg
ligue.equipe.stade.marseille bundesliga.stade.ville.marseille
ligue.equipe.stade.lyon bundesliga.stade.ville.lyon
ligue.equipe.stade.lille bundesliga.stade.ville.lille
ligue.equipe.stade.nice bundesliga.stade.ville.nice
ligue.equipe.stade.renne bundesliga.stade.ville.renne
ligue.equipe.stade.reims bundesliga.stade.ville.reims


Donc
pr -m -t fichier1.txt fichier2.txt > fichier3.txt
devrait faire ce que tu veux, non ?
0
c2020 Messages postés 22 Date d'inscription   Statut Membre Dernière intervention   > mamiemando Messages postés 33769 Date d'inscription   Statut Modérateur Dernière intervention  
 
Merci de ton aide.
Non, car je veux en faire une boucle maintenant et qui doit afficher
" La Ligue 1 comporte : "
et
"mais Les Champions sont : " 
avant chaque ligne.
0
mamiemando Messages postés 33769 Date d'inscription   Statut Modérateur Dernière intervention   7 878 > c2020 Messages postés 22 Date d'inscription   Statut Membre Dernière intervention  
 
Ok mais tu as bien compris qu'avec
pr
tu pouvais donc créer
fichier3.txt
tel que tu l'as spécifié et à partir de fichier3.txt générer pour chaque ligne
" La Ligue 1 comporte  $colonne1 mais Les champions sont : " $colonne2
$colonne1
et
$colonne1
sont respectivement la première et la seconde colonne de
fichier3.txt
?

Mieux, tu peux directement construire ces lignes sans passer par
fichier3.txt
.

#!/bin/bash
pr -m -t fichier1.txt fichier2.txt | while read line
do
    colonne1=$(echo $line | cut -d' ' -f1)
    colonne2=$(echo $line | cut -d' ' -f2)
    echo "La ligue 1 comporte $colonne1 mais les champions sont : $colonne2"
done


Bonne chance
1