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 ?
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
$ 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 :
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 ‘’ :
$ 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