Agréger un fichier texte

Dipsou -  
dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

je dois écrire un script qui va agréger un fichier selon un champ priorité. Exemple

CLIENT;PRIORITE;LIVRE;DVD;CD
A;3;-;MON_DVD;-
A;2;MON_LIVRE;MON_DVD1;-
A;1;-;MON_LIVRE1;-;MON_CD

Au final, je souhaiterais avoir :
A;MON_LIVRE;MON_DVD;MON_CD (la priorité est plus faible pour MON_DVD1 par rapport à MON_DVD et pour MON_LIVRE1 par rapport à MON_LIVRE)

J'ai d'abord trié par client et prio decroissante puis fait une boucle, qui teste pour chaque variable si la valeur est - et auquel cas la remplace par la valeur de la ligne courante.
Malheureusement,cette boucle prend trop de temps.

Est-il possible d'après vous d'utiliser awk pour que le temps de traitement soit plus court ?

Merci d'avance

2 réponses

  1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    hello
    tu veux trier par lignes ou réorganiser chaque colonne triée par priorité ?
    0
    1. Dipsou
       
      Salut,

      Le fichier est déjà trié (client/priorité). Je souhaite le réorganiser pour n'avoir qu'une seule ligne par client.
      0
  2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    comme ça ?
    $ cat a3
    CLIENT;PRIORITE;LIVRE;DVD;CD
    A;3;-;MON_DVD;-
    A;2;MON_LIVRE;MON_DVD1;-
    A;1;MON_LIVRE1;-;MON_CD 
    $ 
    $ awk -F ';' 'NR==1{print} NR>1 {gsub("-","~");c=$1 ; c1[n1++]=$3 ; c2[n2++]=$4 ; c3[n3++]=$5} END{s=";";asort(c1);asort(c2);asort(c3);print c s c1[1] s c2[1] s c3[1]}' a3
    CLIENT;PRIORITE;LIVRE;DVD;CD
    A;MON_LIVRE;MON_DVD;MON_CD 
    $ 
    $ 
    
    0