Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 31/10/2017, à 12:08

spectre128

concatenation information par index

bonjour,

Je cherche comment on peut concatener des fichiers par une information commun à ce fichier.
(c'est pour gerer une MIB avec des OID)
Je m'explique par un exemple:

fichier1:

001 bill
003 marcel
006 bob

fichier2:

001 paris
003 lyon
004 lille
005 lens
006 tours

fichier3:

001 rouge
003 vert
006 jaune

l'info commune est l'index numerique


et j'aimerai  obtenir:

fichier4

bill,paris,rouge
marcel,lyon,vert
bob,tours,jaune

Si quelqu'un peux m'orienter sur la methode car je debute en bash.

Merci.
Cordialement.

Hors ligne

#2 Le 31/10/2017, à 12:25

credenhill

Re : concatenation information par index

hello

$ awk '{t[$1]=t[$1] $2 ","} END {for (n in t){sub(",$", "", t[n]); print t[n]}}'  fichier*
marcel,lyon,vert
lille
lens
bob,tours,jaune
bill,paris,rouge

Hors ligne

#3 Le 31/10/2017, à 12:29

pingouinux

Re : concatenation information par index

Bonjour,

join fichier1 fichier2 | join -o "1.2,1.3,2.2" - fichier3 | sed 's/ /,/g' >fichier4

Hors ligne

#4 Le 31/10/2017, à 12:41

spectre128

Re : concatenation information par index

Merci Pingouinux et credenhill,

Je viens de tester la commande la plus comprehensible pour moi:

join fichier1 fichier2 | join -o "1.2,1.3,2.2" - fichier3 | sed 's/ /,/g' >fichier4

et cela fonctionne! trop puissant.  reste à comprendre la commande join que je ne connaissais pas.

Je regarderai l'autre solution plus tard, je suis pas encore à l'aise avec awk et sed.

Merci à vous.

Cordialement

Hors ligne

#5 Le 31/10/2017, à 15:18

credenhill

Re : concatenation information par index

en bash

$ unset t; declare -A t; while read X A; do t[$X]+="$A,"; done <<<"$(cat fichier*)"; for X in ${!t[@]}; do echo ${t[$X]%,}; done
bill,paris,rouge
marcel,lyon,vert
lille
lens
bob,tours,jaune

Hors ligne

#6 Le 31/10/2017, à 15:27

Watael

Re : concatenation information par index

done < fichier*

!!!

<<<(cat fichier*) pfff!
fais gaffe ! on a ton nom et ton adresse...
lol

Dernière modification par Watael (Le 31/10/2017, à 15:29)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#7 Le 31/10/2017, à 15:47

credenhill

Re : concatenation information par index

pfff ?

$ ls fichier?
fichier1  fichier2  fichier3
$ unset t; declare -A t; while read X A; do t[$X]+="$A,"; done < fichier*; for X in ${!t[@]}; do echo ${t[$X]%,}; done
bash: fichier*: ambiguous redirect
$ 

Hors ligne

#8 Le 31/10/2017, à 15:59

Watael

Re : concatenation information par index

oops.
il y a trop longtemps que je n'ai pas fais lire plusieurs fichiers à une boucle while sad
en mode POSIX :

$ while read line1
do
   read line2 <&3
   read line3 <&4
   echo "$line1,$line2,$line3"
done < fichier1 3<fichier2 4<fichier3

en bash, read a une option -u pour lire depuis un descripteur de fichier.

ce ne sera jamais

done <<<$(cat fichier*)

mais plutôt

done < <(cat fichier*)

Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#9 Le 17/11/2017, à 12:09

spectre128

Re : concatenation information par index

Bonjour,

la commande join fonctionne tres bien sur des fichiers.

Par contre je n'arrive pas à l'adapter sur des variables $var

j'ai beau essayer des echo "$var1" avec des > ou < ou encore | , je trouve pas

quelqu'n peut me donner la synthaxe pour fusionner 2 variables ?

Merci.

cordialement

Hors ligne

#10 Le 17/11/2017, à 12:32

Watael

Re : concatenation information par index

le problème semble avoir changé; cela nécessite peut-être un nouveau sujet.

pourqoi les données se retrouvent-elles dans des variables ?
il faut donner le bout de script qui crée ces variables.

Dernière modification par Watael (Le 17/11/2017, à 12:32)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne