Rechercher : dans
Par :

[Shell]Concatener les lignes de plusieurs fic

Dernière réponse le 4 fév 2006 à 18:48:36 gandhy, le 3 fév 2006 à 17:08:06 
 Signaler ce message aux modérateurs

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!

Meilleures réponses pour « [Shell]Concatener les lignes de plusieurs fic » dans :
Guide d'utilisation du Shell pour débutant VoirSHELL BASH - GUIDE D'UTILISATION - Niveau Débutant Introduction Appel aux membres CCM II. C'est quoi le shell ? III. Comment accéder à la ligne de commande IV. Les consoles virtuelles Exemple : Accéder à la console 3 depuis l'interface...
Javascript - Concaténation de chaînes de caractères VoirLe terme "concaténer" signifie joindre deux chaînes bout à bout pour n'en former qu'une seule. Dans la plupart des langages tels que PHP, la concaténation se fait avec le caractère ".". En javascript, il suffit d'utiliser le caractère plus (+) ou...
Comment lire un fichier ligne par ligne VoirComment lire un fichier ligne par ligne Préambule Boucle while Syntaxe Exemple Astuces Bonus Boucle for Syntaxe Préambule Une des erreurs les plus communes dans l'apprentissage des scripts "bash" sous GNU/LInux pour lire un fichier...
Linux - Le shell VoirIntroduction au shell L'interpréteur de commandes est l'interface entre l'utilisateur et le système d'exploitation, d'où son nom anglais «shell», qui signifie «coquille». Le shell est ainsi chargé de faire l'intermédiaire le système...

1

jipicy, le 3 fév 2006 à 19:14:23
  • +1

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 ;-))
Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé. 

Répondre à jipicy

2

lami20j, le 3 fév 2006 à 19:36:52

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]$

Répondre à lami20j

3

 Gandhy, le 4 fév 2006 à 18:48:36

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

Répondre à Gandhy
Collection CommentÇaMarche.net