Faire un 3eme fichier grace a 2 en les concatenant ( script)
Résolu
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 :
Je sais c'est pas grand chose ;)
Merci d'avance pour votre aide.
_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.
1 réponse
-
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 commandepr
, 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 dequay.txt
à la suite degitlab.txt
, puis la première ligne deregistry.txt
à la suite degitlab.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-
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 à cefichier3.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- 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
Doncpr -m -t fichier1.txt fichier2.txt > fichier3.txt
devrait faire ce que tu veux, non ? - Ok mais tu as bien compris qu'avec
pr
tu pouvais donc créerfichier3.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
où$colonne1
et$colonne1
sont respectivement la première et la seconde colonne defichier3.txt
?
Mieux, tu peux directement construire ces lignes sans passer parfichier3.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
-