Sélection de lignes avec AWK
Résolu
bulluk
Messages postés
8
Statut
Membre
-
bulluk Messages postés 8 Statut Membre -
bulluk Messages postés 8 Statut Membre -
Bonjour,
C'est une question surement simple pour beaucoup
mais je n'arrive pas à m'en dépatouiller avec les différents autres sujets dans le forum:
je ne veux récupérer que les 2 première lignes pour chacune des valeurs du premier champ.
Je m'explique: sous UNIX et avec AWK je souhaite
faire la liste des 2 plus gros fichiers par utilisateur pour un répertoire donné.
Je pars pour cela d'un fichier qui contient la liste triée de tous les
fichiers de ce répertoire avec comme champ user, taille du fichier et chemin absolu
vers le fichier.
exemple
toto 50 /rep/fichier1
toto 40 /rep/fichier2
toto 30 /rep/fichier3
...
tata 25 /rep/fichier1
tata 10 /rep/fichier2
tata 5 /rep/fichier3
...
et je voudrais obtenir dans l'idéal:
"Les 2 plus gros fichiers de l'utilisateur toto sont:
toto 50 /rep/fichier1
toto 40 /rep/fichier2
Les 2 plus gros fichiers de l'utilisateur tata sont:
tata 25 /rep/fichier1
tata 10 /rep/fichier2
"
Merci d'avance pour votre aide.
C'est une question surement simple pour beaucoup
mais je n'arrive pas à m'en dépatouiller avec les différents autres sujets dans le forum:
je ne veux récupérer que les 2 première lignes pour chacune des valeurs du premier champ.
Je m'explique: sous UNIX et avec AWK je souhaite
faire la liste des 2 plus gros fichiers par utilisateur pour un répertoire donné.
Je pars pour cela d'un fichier qui contient la liste triée de tous les
fichiers de ce répertoire avec comme champ user, taille du fichier et chemin absolu
vers le fichier.
exemple
toto 50 /rep/fichier1
toto 40 /rep/fichier2
toto 30 /rep/fichier3
...
tata 25 /rep/fichier1
tata 10 /rep/fichier2
tata 5 /rep/fichier3
...
et je voudrais obtenir dans l'idéal:
"Les 2 plus gros fichiers de l'utilisateur toto sont:
toto 50 /rep/fichier1
toto 40 /rep/fichier2
Les 2 plus gros fichiers de l'utilisateur tata sont:
tata 25 /rep/fichier1
tata 10 /rep/fichier2
"
Merci d'avance pour votre aide.
Configuration: UNIX AIX
3 réponses
-
Une façon de faire :
jp@MDK:~/tmpfs ssh$ cat exemple.txt toto 50 /rep/fichier1 toto 40 /rep/fichier2 toto 30 /rep/tata/fichier3 tata 25 /rep/fichier1 tata 10 /rep/fichier2 tata 5 /rep/fichier3 titi 50 /rep/toto/fichier1 titi 30 /rep/fichier2 titi 20 /rep/fichier3 tutu 50 /rep/fichier1 tutu 30 /rep/titi/fichier2 tutu 20 /rep/fichier3 jp@MDK:~/tmpfs ssh$ cat foo.sh #! /bin/bash for name in $(awk '{ print $1 }' exemple.txt | sort -u) do echo "Les 2 plus gros fichiers de l'utilisateur $name sont :" egrep -m 2 "^$name" exemple.txt echo done jp@MDK:~/tmpfs ssh$ ./foo.sh Les 2 plus gros fichiers de l'utilisateur tata sont : tata 25 /rep/fichier1 tata 10 /rep/fichier2 Les 2 plus gros fichiers de l'utilisateur titi sont : titi 50 /rep/toto/fichier1 titi 30 /rep/fichier2 Les 2 plus gros fichiers de l'utilisateur toto sont : toto 50 /rep/fichier1 toto 40 /rep/fichier2 Les 2 plus gros fichiers de l'utilisateur tutu sont : tutu 50 /rep/fichier1 tutu 30 /rep/titi/fichier2 jp@MDK:~/tmpfs ssh$;-))
-
hello
une méthode avec awk
awk '{if(x[$1] == 0)printf("Les 2 plus gros fichiers de l'utilisateur %s sont:\n", $1) ; if(x[$1] < 2) {x[$1]++ ; print $0}}' < fichier.txt -
Salut,
L'emploi de "awk" est un impératif ?
-
Hello jipicy (l'incontournable éleveur du forum AWK),
Il n'y a pas de souci pour utiliser autre chose que awk mais il y a juste un détail qui peut être embêtant pour l'utilisation de grep par exemple: il y a des cas où l'utilisateur toto a des fichiers avec le nom de l'utilisateur tata dedans . Par exemple:
toto 50 /rep/Exemple/tata/fichier1
Un grand merci.
Un jeune pigouin
-