2012-03-02 44 views
0

“cat/dev/tty0”我可以读取连续的输入字符流。一些传入的“电报”由一个换行字符分隔。 不,我想通过awk过滤这个,但我无法弄清楚如何启动awk进行分析。它似乎总是等待文件的末尾,我看到在标准输出上没有任何结果让awk过滤无尽的管道

所以这个作品,表现出我的每一行的第一个字:

cat /dev/tty0 > myfile (cancel somtime with Ctrl-C) 
cat myfile | awk '{printf "%s\n",$1}' 

但这不,showling什么:

cat /dev/tty0 | awk '{printf "%s\n",$1}' 

有什么想法? Achim

回答

1

您可以尝试使用tail -f

tail -f /dev/tty0 | awk '{printf "%s\n",$1}' 

tail具有可以是使用诸如--pid=nnn当给定的进程死亡,其停止tail的其他选项。根据你的口味,大-F也可能工作。

+0

顺便说一句,您可能无法运行此操作在后台如果tty是你自己的终端。 – groovyspaceman 2012-03-02 19:50:49

3

这可能是由于缓冲。我似乎无法重现你的结果,但试试这个(stdbuf是的coreutils的一部分):

stdbuf -i0 -o0 -e0 cat /dev/tty0 | awk '{printf "%s\n",$1}' 

或者这(无缓冲的expect部分):

unbuffer cat /dev/tty0 | awk '{printf "%s\n",$1}' 

或者这样:

awk '{printf "%s\n",$1}' < /dev/tty0 
+0

感谢爱德华多你的stdbuf例子效果不错! – Achim 2012-03-03 16:39:07

+0

但我仍然对Linux管道有一些基本的知识缺乏:-(在我的问题中,我压制了一个小细节:以24字节的tty0二进制格式接收报文,因此将它们转换为ASCII我使用“| od -w24 -An -tu1“之间,但它会再次不工作.... :-( – Achim 2012-03-03 16:40:03

+0

我已经明白了,只需使用stdbuf两次:”* stdbuf -i0 -o0 -e0 cat/dev/tty0 | stdbuf -i0 -o0 -e0 od -w24 -An -tu1 | awk'{printf“Temp:%s \ n”,$ 1}'*“ – Achim 2012-03-03 16:48:26