awk tri fichier

awk tri fichier - Shell/Batch - Programmation

Marsh Posté le 07-03-2008 à 16:03:27    

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.

Reply

Marsh Posté le 07-03-2008 à 16:03:27   

Reply

Marsh Posté le 08-03-2008 à 17:07:51    

Ben ce genre d'algo est un peu évolué et ne se développera pas en une seule ligne de commande !!!
 

Code :
  1. #!/bin/sh
  2. lim=10
  3. # Tri du fichier et traitement ligne par ligne
  4. sort -k1 -r -n -k3 fichier_client.txt |while read ligne
  5. do
  6.      client=`echo $ligne |cut -f1 -d\;`
  7.     # A chaque changement de client
  8.     if test "$client" != "$mem"
  9.     then
  10.          # On mémorise le client et on réinitialise le cpt
  11.          mem="$client"
  12.          cpt=0
  13.     fi
  14.     # Si le compteur est inférieur à la limite on affiche la ligne
  15.     test $cpt -lt $lim && echo "$ligne"
  16.     # Le compteur s'incrémente
  17.     cpt=`expr $cpt + 1`
  18. done


Message édité par Sve@r le 08-03-2008 à 20:38:50

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed