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

Résolu
c2020 Messages postés 24 Statut Membre -  
mamiemando Messages postés 33174 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.

1 réponse

  1. mamiemando Messages postés 33174 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    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
    1. c2020 Messages postés 24 Statut Membre
       
      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
      1. mamiemando Messages postés 33174 Date d'inscription   Statut Modérateur Dernière intervention   7 944 > c2020 Messages postés 24 Statut Membre
         
        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
      2. c2020 Messages postés 24 Statut Membre > mamiemando Messages postés 33174 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
      3. mamiemando Messages postés 33174 Date d'inscription   Statut Modérateur Dernière intervention   7 944 > c2020 Messages postés 24 Statut Membre
         
        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