我正在尝试使用 gawk 操作 TCP 流。 TCP 服务器输出一个由空格分隔的文本字符串。我想在开头添加一个额外的字符串,然后用逗号而不是空格分隔其余字段。我尝试过如下:
socat TCP4:127.0.0.1:8888 - | gawk '{out=""; for(i=1;i<=NF;i++){if (i > 1) {out=out","$i} else out="Hello,"$i}; print out}'
这是有效的。但现在我想将该流重定向到第二个套接字上,如下所示:
socat TCP4:127.0.0.1:5754 PIPE gawk '{out=""; for(i=1;i<=NF;i++){if (i > 1) {out=out","$i} else out="$LZER0,POS,"$i}; print out}' | socat - TCP:127.0.0.1:9999
但在 127.0.0.1:9999 处什么也没有,我尝试用以下方法收听:
socat tcp-listen:9999,reuseaddr,ignoreeof,fork stdout
但什么也没有。
我又做了一个测试:
socat TCP4:127.0.0.1:5754 PIPE gawk '{out=""; for(i=1;i<=NF;i++){if (i > 1) {out=out","$i} else out="$LZER0,POS,"$i}; print out}' | socat - -
但我的标准输出上又没有任何内容。
你能帮助我吗?
答案1
gawk
当它的输出进入管道并且没有生成足够的输出来刷新缓冲区时,它的输出很可能会被缓冲。
要手动刷新输出缓冲区,请fflush()
在gawk
程序中使用:
gawk '{ ... ; print out; fflush() }'