为什么我不能将stdout从netcat传递给awk?

时间:2017-01-01 23:07:55

标签: bash awk raspbian netcat

我在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

1 个答案:

答案 0 :(得分:2)

当不写入终端时,grep的输出被完全缓冲。使用--line-buffered标志表示grep

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

对于不允许您控制其输出缓冲行为的程序,程序可以使用stdbuf命令包装