Agréger un fichier texte
Dipsou
-
dubcek Messages postés 18789 Date d'inscription Statut Contributeur Dernière intervention -
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
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:
- Agréger un fichier texte
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
2 réponses
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 $ $
Le fichier est déjà trié (client/priorité). Je souhaite le réorganiser pour n'avoir qu'une seule ligne par client.