[Shell]Concatener les lignes de plusieurs fic

gandhy -  
 Gandhy -
Bonjour tous,

Je suis en train de me prendre la tête à essayer de concaténer les lignes de plusieurs fichiers ASCII. Je m'explique:
J'ai 3 fichiers:
aaaa aaa
bbb bbb
cccc ccccc

111 1111
222 2222
333 3333

AAA AAA
BBB BBB
CCC CCC

Et je voudrais assembler les lignes entre elles pour avoir:

aaaa aaa 111 1111 AAA AAA
bbb bbb 222 2222 BBB BBB
cccc ccccc 333 3333 CCC CCC

Les fichiers ont le même nombre de lignes.

Et je bloque... Si quelqu'un a une solution, ça m'aiderait beaucoup :)
Merci d'avance!

3 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    Ceci devrait faire l'affaire :
    [jp@Mandrake tmpfs]$ cat script.sh
    #!/bin/bash
    
    ## Définition des variables ##
    # Variable de référence pour le nombre de lignes des fichiers
    REF=`cat fich1.txt | wc -l`
    # Variable compteur
    COUNT=1
    
    # Boucle
    # Tant que le compteur est inférieur ou égal au nombre de lignes
    while [ "$COUNT" -le "$REF" ];
    do
            # On affiche la ligne correspondant au "compteur" avec le
            #+ filtre "sed", que l'on redirige (ajoute) vers le fichier
            #+ final.
            # L'option "-n" de la commande "echo" sert à éviter le
            #+ saut de ligne. Remarquer l'espace avant le guillemet
            #+ final.
            echo -n "`sed -n "$COUNT"p fich1.txt` " >> fichier.txt
            echo -n "`sed -n "$COUNT"p fich2.txt` " >> fichier.txt
            # Pas d'option "-n" ici et pas d'espace en fin
            echo "`sed -n "$COUNT"p fich3.txt`" >> fichier.txt
            # On incrémente le compteur
            COUNT=$(expr $COUNT + 1)
    done
    [jp@Mandrake tmpfs]$
    La preuve :
    [jp@Mandrake tmpfs]$ cat fich1.txt
    aaaa aaa
    bbb bbb
    cccc ccccc
    
    [jp@Mandrake tmpfs]$ cat fich2.txt
    AAA AAA
    BBB BBB
    CCC CCC
    
    [jp@Mandrake tmpfs]$ cat fich3.txt
    111 1111
    222 2222
    333 3333
    
    [jp@Mandrake tmpfs]$ sh script.sh
    
    [jp@Mandrake tmpfs]$ cat fichier.txt
    aaaa aaa AAA AAA 111 1111
    bbb bbb BBB BBB 222 2222
    cccc ccccc CCC CCC 333 3333
    
    [jp@Mandrake tmpfs]$
    C'est pas trop élégant, mais ça marche... enfin chez moi en tous les cas ;-))
    1
  2. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Bonsoir,

    une variante avec Perl, donc pareil un script
    #! /usr/bin/perl
    
    use warnings;
    use strict;
    
    my %new_file=();
    
    open A,"<","a.txt"
            or die "Impossible d'ouvrir le fichier : $!\n";
    open B,"<","b.txt"
            or die "Impossible d'ouvrir le fichier : $!\n";
    open C,"<","c.txt"
            or die "Impossible d'ouvrir le fichier : $!\n";
    
    open my $file,">","/home/lamitest/corbeille/concatenation3.txt"
            or die "Impossible de créer le fichier : $!\n";
    
    while (my $ligne = (<A> || <B> || <C>)){
            chomp $ligne;
            push @{$new_file{$.}},$ligne;
    }
    close A;
    close B;
    close C;
    
    foreach ( sort keys %new_file ) {
            print $file "@{$new_file{$_}}\n";
    }
    
    Le résultat
    [lamitest@localhost corbeille]$ cat a.txt
    aaaa aaa
    bbb bbb
    cccc ccccc
    [lamitest@localhost corbeille]$ cat b.txt
    111 1111
    222 2222
    333 3333
    [lamitest@localhost corbeille]$ cat c.txt
    AAA AAA
    BBB BBB
    CCC CCC
    [lamitest@localhost corbeille]$ perl /home/lamitest/corbeille/lignes_3_fic.pl
    [lamitest@localhost corbeille]$ cat concatenation3.txt
    aaaa aaa 111 1111 AAA AAA
    bbb bbb 222 2222 BBB BBB
    cccc ccccc  333 3333 CCC CCC
    [lamitest@localhost corbeille]$
    
    0
  3. Gandhy
     
    Merci beaucoup je tente ça Lundi :)
    Je vais prendre la version Shell, je voudrais éviter le perl :)

    Même si ce n'est pas élégant, c'est pas un très gros soucis, si ça marche :P
    0