181 votes

Impression de la dernière colonne d'une ligne dans un fichier

J'ai un fichier qui est constamment écrit/mis à jour. Je veux trouver la dernière ligne contenant un mot particulier, puis imprimer la dernière colonne de cette ligne.

Le fichier ressemble à quelque chose comme ceci. D'autres lignes A1/B1/C1 y seront ajoutées au fil du temps.

A1 123 456
B1 234 567
C1 345 678
A1 098 766
B1 987 6545
C1 876 5434

J'ai essayé d'utiliser

tail -f file | grep A1 | awk '{print $NF}'

pour imprimer la valeur 766, mais rien n'est produit.

Y a-t-il un moyen de le faire ?

264voto

Olaf Dietsche Points 35264

Vous ne voyez rien, à cause de la mise en mémoire tampon. La sortie est affichée lorsqu'il y a suffisamment de lignes ou que la fin du fichier est atteinte. tail -f signifie attendre d'autres données, mais il n'y a plus de lignes dans la rubrique file et donc le tuyau vers grep n'est jamais fermée.

Si vous omettez -f de tail la sortie est affichée immédiatement :

tail file | grep A1 | awk '{print $NF}'

@EdMorton a bien sûr raison. Awk peut rechercher A1 ce qui raccourcit la ligne de commande à

tail file | awk '/A1/ {print $NF}'

ou sans queue, en indiquant la dernière colonne de toutes les lignes contenant A1

awk '/A1/ {print $NF}' file

Merci au commentaire de @MitchellTracy, tail pourrait manquer l'enregistrement contenant A1 et vous n'obtenez donc aucun résultat. Ce problème peut être résolu en commutant tail y awk , en recherchant d'abord dans le fichier et en n'affichant que la dernière ligne :

awk '/A1/ {print $NF}' file | tail -n1

39voto

Pour imprimer la dernière colonne d'une ligne, il suffit d'utiliser $(NF) :

awk '{print $(NF)}'

13voto

Steve Points 18420

Une façon d'utiliser awk :

tail -f file.txt | awk '/A1/ { print $NF }'

12voto

miono Points 344

Vous pouvez le faire sans awk avec quelques tuyaux.

tac file | grep -m1 A1 | rev | cut -d' ' -f1 | rev

4voto

hgh Points 581

Peut-être cela fonctionne-t-il ?

grep A1 file | tail -1 | awk '{print $NF}'

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X