Awk : tri de fichier et recuperation de ligne
flora806
-
jipicy Messages postés 40842 Date d'inscription Statut Modérateur Dernière intervention -
jipicy Messages postés 40842 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
j'utilise AWK et je voudrais effectuer un tri à partir d'un fichier txt sous forme de:
client 1;produit1;val
client 1;produit2;val
client 1;produit3;val
client 1;produit4;val
client 1;produit5;val
.....
client 2;produit1;val
client 2;produit2;val
client 2;produit3;val
....
mon tri consiste à trier par client et par val (récupérer les val supérieures) et afficher uniquement les 10 premières lignes par client:
j'ai utilisé la commande suivante:
$ awk -F";" ' { print $1,$2,$3 } ' C:/data.txt | sort -n -k 1 -r -k 3| head -n 10| cat > C:/dataTri.txt
cette commande permet uniquement d'afficher les 10 résultats triés pour un seul client et non pas pour TOUS les clients.
Merci pour votre aide.
j'utilise AWK et je voudrais effectuer un tri à partir d'un fichier txt sous forme de:
client 1;produit1;val
client 1;produit2;val
client 1;produit3;val
client 1;produit4;val
client 1;produit5;val
.....
client 2;produit1;val
client 2;produit2;val
client 2;produit3;val
....
mon tri consiste à trier par client et par val (récupérer les val supérieures) et afficher uniquement les 10 premières lignes par client:
j'ai utilisé la commande suivante:
$ awk -F";" ' { print $1,$2,$3 } ' C:/data.txt | sort -n -k 1 -r -k 3| head -n 10| cat > C:/dataTri.txt
cette commande permet uniquement d'afficher les 10 résultats triés pour un seul client et non pas pour TOUS les clients.
Merci pour votre aide.
Configuration: Windows XP Firefox 2.0.0.12
4 réponses
-
Salut,
Si j'ai bien compris, tu veux les 10 val supérieurs pour le client1 et pour le client 2, ... ? -
Sauf si mon shell est trop rouillé, si tu fais un head -n 10 , tu ne pourras avoir que 10 résultats à l'écran donc comment espères-tu avoir 10 * nb clients lignes en sortie ?
Soit découpes ton fichier en autant de client soit il va falloir faire un script un peu plus compliqué à mon avis. -
En fait, tu essayes de faire ce que les bases de données font. La solution ne sera pas si facile et je ne sais pas si un enchainement de commandes de type shell va pouvoir résoudre ton problème.
Ton raisonnement est bon pour un client. Il faudrait que tu découpes ton fichier client par client puis que tu utilises ta commande sur chaque fichier.
Il y a certainement d'autres solutions, mais c'est tout ce que j'ai tout de suite là -
Salut,
Essaie ça :while read line do grep "$line" C:/data.txt | sort -n -k 1 -r -k 3 | head -n 10 >> C:/dataTri.txt done < <(awk -F";" '{ print $1 }' C:/data.txt | sort -u);-))