[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.

3 réponses

  1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    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
    1. Thebottle
       
      C'est parfait ce truc !
      Merci beaucoup...
      0
  2. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    Bonjour

    Une solution possible

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