2017-01-01 2 views
3

J'utilise Raspbian (en fait c'est HASSBian) sur un RPi3. Je suis en train d'analyser la sortie de netcat:Pourquoi je ne peux pas passer de stdout de netcat à awk?

[email protected]:~ $ netcat localhost 1099 | grep -i on 
01/01 22:57:29 Rx RF HouseUnit: C2 Func: On 
01/01 22:57:30 Rx RF HouseUnit: B4 Func: On 
01/01 22:57:31 Rx RF HouseUnit: B5 Func: On 
01/01 22:57:32 Rx RF HouseUnit: B6 Func: On 
01/01 22:57:40 Rx RF HouseUnit: C1 Func: On 
01/01 22:57:47 Rx RF HouseUnit: C2 Func: On 
01/01 22:58:03 Rx RF HouseUnit: C2 Func: On 
01/01 22:58:04 Rx RF HouseUnit: C1 Func: On 

mais lorsque je tente de tuyau à ce awk pour tirer les deux champs que je veux que je reçois pas de sortie. Il ressemble à ceci:

[email protected]:~ $ netcat localhost 1099 | grep -i on | awk '{print $6,$8}' 

Ai-je tort de penser que cela devrait fonctionner?

[email protected]:~ $ uname -a 
Linux raspberrypi 4.4.38-v7+ #938 SMP Thu Dec 15 15:22:21 GMT 2016 armv7l GNU/Linux 
+2

S'il vous plaît jeter un oeil à: [Que dois-je faire quand quelqu'un répond à ma question?] (http://stackoverflow.com/help/someone-answers) – Cyrus

Répondre

2

La sortie de grep est entièrement mise en mémoire tampon lorsqu'elle n'écrit pas sur un terminal. Utilisez le drapeau --line-buffered pour grep

netcat localhost 1099 | grep --line-buffered -i on | awk '{print $6,$8}' 

Pour les programmes qui ne vous permet pas de contrôler son comportement en mémoire tampon de sortie, il le programme peut être enveloppé avec la commande stdbuf

+0

Pourquoi ne pas suggérer de ne pas utiliser 'grep' et d'utiliser uniquement' awk'? Allez, fais un effort! –

+2

Pourquoi ne pas vous suggérer comme une réponse? – nos

+0

Parce que ce serait trop de bruit pour ajouter une autre réponse à une question si triviale. –