Awk avec tail -f

Bonjour,

La commande suivante ne fonctionne pas

alors que la commande suivante fonctionne très bien pour chaque instance de “test”:

Qui peut m’éclairer ?

C’est normal. Tu fais tail -f

-f, --follow[={name|descriptor}] afficher les dernières données ajoutées au fur et à mesure que le fichier s'accroît ; -f, --follow, et --follow=descriptor sont équivalents

C’est du temps réel et donc ton pipe | ne fonctionnera pas.

Tu veux faire quoi exactement ?

Si tu veux savoir toutes les instances de “test” le mieux serait d’utiliser grep avec le tampon sur une ligne :

--line-buffered Utiliser un tampon de ligne sur le flux de sortie. Ceci peut réduire les performances.

C’est tout de même possible avec awk :mrgreen:

$ cat entree
un"deux"trois"test"
un"deux"trois"encore un test
$ tail -f entree | awk -F'"' -W interactive '{print $4}'
test
encore un test

J’ajouterais :

:smiley:

Bien vu, mais y a un ‘}’ en trop, et faut -W interactive sinon ça marche pas avec mawk (awk fourni en standard avec Debian), et enfin ‘\’ à la place de ‘’ :017 :

$ readlink -f  /usr/bin/awk                                         
/usr/bin/mawk
$ tail -f ../logs/$whatlog | awk -W interactive -F\\ '$4 == "test"{system("./listmodes")}'
/bin/sh: ./listmodes: not found #normal ^^

[quote=“Knucky”] $ readlink -f /usr/bin/awk /usr/bin/mawk $ tail -f ../logs/$whatlog | awk -W interactive -F\\ '$4 == "test"{system("./listmodes")}' /bin/sh: ./listmodes: not found #normal ^^ [/quote]
Ca viens pas de awk ça viens de ton shell. J’ai pas testé d’où l’erreur.

Dans le code initiale la vrai erreur était qu’il vaut mieu initialisé FS qu’une seule fois :

Merci pour vos réponses. J’ai fini par mettre en place ceci:

tail -f ../logs/$whatlog | awk -W interactive 'BEGIN{FS="\""} {if ($4 == "test") {system("./listmodes")}}'

Ca marche impeccable :slightly_smiling: