Comment lister des lignes spécifiques en utilisant awk?

J’ai un fichier qui est sortingé comme suit:

2 Good 2 Hello 3 Goodbye 3 Begin 3 Yes 3 No 

Je souhaite rechercher la valeur la plus élevée dans le fichier et afficher celle qui correspond à la ligne?

 3 Goodbye 3 begin 3 Yes 3 No 

Comment pourrais-je faire ça?

fichier cat.txt | sort -r | awk ‘{if ($ 1> = prev) {print $ 0; prev = $ 1}} ‘

 3 Yes 3 No 3 Goodbye 3 Begin 

En supposant que fichier.txt contient

 2 Good 2 Hello 3 Goodbye 3 Begin 3 Yes 3 No 

awk à la rescousse!

 $ awk 'FNR==NR{if(max<$1) max=$1; next} $1==max' file{,} 3 Goodbye 3 Begin 3 Yes 3 No 

double passe, trouve le maximum et filtre le rest.

D’abord, obtenez la valeur la plus élevée du fichier dans une variable. Considérant que le fichier est déjà sortingé, prenez la dernière ligne du fichier. Ensuite, parsingz le nombre en utilisant awk.

 highest=`tail -1 file.list|awk '{print $1}'` 

Ensuite, grep le fichier en utilisant cette valeur.

 grep "^${highest} " file.list 

Cela devrait faire le travail. J’utilise uniquement awk comme requirejs dans la question:

 awk 'BEGIN {v=0} {l = l "\n" $0} {if ($1>v) {l = $0; v = $1}} END {print l}' file.txt 

La variable v est initialisée (avant l’parsing du fichier) à 0. Chaque ligne est ensuite lue et conservée en mémoire; Si le premier champ ( $1 ) est supérieur à v , alors mettez à jour v et videz ce qui se trouve dans l . À la fin, imprimez simplement le contenu de l .

C’est plus facile que vous ne le pensez.

 awk '/^3/' file 3 Goodbye 3 Begin 3 Yes 3 No