[AWK] transformer colonne en ligne.

Résolu/Fermé
Thebottle - 24 mai 2020 à 12:03
 Thebottle - 28 mai 2020 à 15:10
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 18758 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 décembre 2024 5 623
26 mai 2020 à 13:05
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
C'est parfait ce truc !
Merci beaucoup...
0
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812
Modifié le 25 mai 2020 à 19:30
Bonjour

Une solution possible

Bonne chance
0
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