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