Rechercher : dans
Par :

Sélection de lignes avec AWK

Dernière réponse le 18 jui 2008 à 14:11:36 bulluk, le 18 jui 2008 à 10:47:55 
 Signaler ce message aux modérateurs

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.

Configuration: UNIX AIX

Meilleures réponses pour « Sélection de lignes avec AWK » dans :
Excel - Surligner la ligne active VoirQuand on "ripe" sur la feuille on perd souvent le point de repère. Cette petite fonction surligne (le fond en rouge et l'écriture en jaune), toute la ligne où se trouve le curseur. À placer dans le module de la feuille Private Sub...
Sed - Introduction à SED - Part III VoirSED - The Stream EDitor - Part III Ce document est une introduction à la pratique et à l'utilisation de l'éditeur de flux "SED", qui essaie de couvrir certaines fonctionnalités assez méconnues, pour ne pas dire "quasi inconnues", qui font de "SED"...
Comment lire un fichier ligne par ligne VoirComment lire un fichier ligne par ligne Préambule Boucle while Syntaxe Exemple Astuces Bonus Boucle for Syntaxe Préambule Une des erreurs les plus communes dans l'apprentissage des scripts "bash" sous GNU/LInux pour lire un fichier...
Tableur - La sélection des cellules VoirSélection de cellules Le tableur est un formidable outil pour manipuler des données. Ainsi, pour pouvoir manipuler les données il est nécessaire de disposer d'outils permettant de sélectionner rapidement toutes les cellules dont on a...
Linux - L'éditeur Vi VoirIntroduction à Vi Vi est un des éditeurs de texte les plus populaires sous les systèmes de type Unix (avec Emacs et pico) malgré son ergonomie très limitée. Sous Linux il existe une version libre de Vi appelée Vim (Vi Improved). Vi (prononcez...

1

jipicy, le 18 jui 2008 à 11:11:05

Salut,

L'emploi de "awk" est un impératif ?
JP - Éleveur de pingouins -
Faites un geste pour l'environnement, fermez vos fenêtres et adoptez un manchot.

Répondre à jipicy

2

bulluk, le 18 jui 2008 à 11:50:21

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

Répondre à bulluk

4

tiboux, le 18 jui 2008 à 11:58:04

Man head

Répondre à tiboux

5

jipicy, le 18 jui 2008 à 12:10:28

Nan, c'est un peu plus prise de tête quand même ;-))
JP - Éleveur de pingouins -
Faites un geste pour l'environnement, fermez vos fenêtres et­ adoptez un manchot.

Répondre à jipicy

3

jipicy, le 18 jui 2008 à 11:56:37
  • +1

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$
;-))
JP - Éleveur de pingouins -
Faites un geste pour l'environnement, fermez vos fenêtres et adoptez un manchot.

Répondre à jipicy

7

bulluk, le 18 jui 2008 à 12:54:32

C'est tout simplement parfait!

Un grand merci et un grand bravo à commentçàmarche qui devient vraiment incontournable quand on développe!

Répondre à bulluk

6

dubcek, le 18 jui 2008 à 12:18:40
  • +1

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

Répondre à dubcek

8

 bulluk, le 18 jui 2008 à 14:11:36

Hello Dubcek,

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

Encore un grand merci à vous tous et à une prochaine.

Répondre à bulluk