[Shell]Concatener les lignes de plusieurs fic
gandhy
-
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!
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:
- Écrire un programme count_files.sh
- Classic shell - Télécharger - Personnalisation
- Partage de photos en ligne - Guide
- Concatener deux cellules excel - Guide
- Écrire plusieurs lignes dans une cellule excel mac - Guide
- Excel trier par ordre alphabétique en gardant les lignes - Guide
3 réponses
Salut,
Ceci devrait faire l'affaire :
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 ;-))
Bonsoir,
une variante avec Perl, donc pareil un script
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]$