Agréger un fichier texte

Dipsou -  
dubcek Messages postés 18789 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
A voir également:

2 réponses

dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
hello
tu veux trier par lignes ou réorganiser chaque colonne triée par priorité ?
0
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
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
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