[AWK] transformer colonne en ligne.

Résolu
Thebottle -  
 Thebottle -
Bonjour,

J'ai un fichier du type :
=====================
toto valeur1
titi valeur1
tata valeur1
toto valeur2
toto valeur3
titi valeur2
tata valeur2
=====================

Je souhaiterais le transformer en
============================
toto valeur1 valeur2 valeur3
titi valeur1 valeur2
tata valeur1 valeur2
============================

J'ai commencé par le trier,

cat fichier.txt | sort -k 1


Apres je pense qu'il exploiter avec awk, mais je ne suis pas un spécialiste...
Quelqu'un aurait il une idée ?

Par avance merci.
A voir également:

3 réponses

dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
hello
$ awk '{t[$1]=t[$1] " " $2} END {for (n in t)print n, t[n]}' file.txt | sort
alr 500
aud 510 511
env 5230
fem 5237 5238 5239
fre 570 555 575
mqs 119 1223 125
red 500 5023 505
tst 595 596
3
Thebottle
 
C'est parfait ce truc !
Merci beaucoup...
0
mamiemando Messages postés 33769 Date d'inscription   Statut Modérateur Dernière intervention   7 878
 
Bonjour

Une solution possible

Bonne chance
0
Thebottle
 
Merci pour votre réponse.
Ce n'est pas exactement ce que je cherchais...
Car il transforme uniquement ligne en colonne, si j'ai bien compris...

Pour mon cas, il fallait trier par motif aussi ...

J'ai fini par trouver quelque chose avec les tableaux en ksh...
C'est pas du super code, parce que j'ai pas l'habitude des tableaux, mais ca marche.

truc@totot: /home/truc $ cat file.txt
alr 500
aud 510
aud 511
env 5230
fem 5237
fem 5238
fem 5239
fre 570
fre 555
fre 575
mqs 119
mqs 1223
mqs 125
red 500
red 5023
red 505
tst 595
tst 596

Je compare le champs 1 de la ligne précédente...

truc@totot: /home/truc $ NB=1
truc@totot: /home/truc $ cat file.txt | sort -k 1 | while read line
do
NB_AV=$((NB-1))
set -A tab$NB $line
if [ "$(eval echo \${tab$NB[0]})" = "$(eval echo \${tab$NB_AV[0]})" ] ; then
EXPR=$(eval echo "\${tab$NB[1]}")
printf "$EXPR " " "
else
EXPR=$(eval echo "\${tab$NB[0]} \${tab$NB[1]}")
print
printf "$EXPR " " "
fi
NB=$((NB+1))
done

alr 500
aud 510 511
env 5230
fem 5237 5238 5239
fre 555 570 575
mqs 119 1223 125
red 500 5023 505
tst 595 596
0