Sélection de lignes avec AWK [Résolu/Fermé]

Signaler
Messages postés
8
Date d'inscription
vendredi 18 juillet 2008
Statut
Membre
Dernière intervention
22 juillet 2008
-
Messages postés
8
Date d'inscription
vendredi 18 juillet 2008
Statut
Membre
Dernière intervention
22 juillet 2008
-
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.

3 réponses

Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 871
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$
;-))
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
8
Date d'inscription
vendredi 18 juillet 2008
Statut
Membre
Dernière intervention
22 juillet 2008

C'est tout simplement parfait!

Un grand merci et un grand bravo à commentçàmarche qui devient vraiment incontournable quand on développe!
Messages postés
18246
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
21 juillet 2021
5 327
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
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
8
Date d'inscription
vendredi 18 juillet 2008
Statut
Membre
Dernière intervention
22 juillet 2008

Hello Dubcek,

Je savais bien que l'on pouvait tout faire avec AWK ;-)

Encore un grand merci à vous tous et à une prochaine.
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 871
Salut,

L'emploi de "awk" est un impératif ?
Messages postés
8
Date d'inscription
vendredi 18 juillet 2008
Statut
Membre
Dernière intervention
22 juillet 2008

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
>
Messages postés
8
Date d'inscription
vendredi 18 juillet 2008
Statut
Membre
Dernière intervention
22 juillet 2008

man head
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 871 > tiboux
Nan, c'est un peu plus prise de tête quand même ;-))