我在RPi3上使用Raspbian(实际上它是HASSBian)。我正在尝试解析netcat的输出:
pi@raspberrypi:~ $ 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
但是当我尝试将其管道输入awk以取出我想要的两个字段时,我得不到输出。它看起来像这样:
pi@raspberrypi:~ $ netcat localhost 1099 | grep -i on | awk '{print $6,$8}'
我觉得这应该有效吗?
pi@raspberrypi:~ $ uname -a
Linux raspberrypi 4.4.38-v7+ #938 SMP Thu Dec 15 15:22:21 GMT 2016 armv7l GNU/Linux
答案 0 :(得分:2)
当不写入终端时,grep的输出被完全缓冲。使用--line-buffered
标志表示grep
netcat localhost 1099 | grep --line-buffered -i on | awk '{print $6,$8}'
对于不允许您控制其输出缓冲行为的程序,程序可以使用stdbuf命令包装