[AWK] transformer colonne en ligne.
Résolu
Thebottle
-
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.
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:
- [AWK] transformer colonne en ligne.
- Partager photos en ligne - Guide
- Déplacer colonne excel - Guide
- Trier colonne excel - Guide
- Mètre en ligne - Guide
- Colonne word - Guide
3 réponses
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
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
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]}")
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
Merci beaucoup...