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

最佳答案

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

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

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

关于bash - 为什么我不能将标准输出从 netcat 传递到 awk?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41419819/

10-16 20:40