[Shell]Concatener les lignes de plusieurs fic

Fermé
gandhy - 3 févr. 2006 à 17:08
 Gandhy - 4 févr. 2006 à 18:48
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!
A voir également:

3 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
3 févr. 2006 à 19:14
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
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
3 févr. 2006 à 19:36
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
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