Shell 两个连续的管道
此命令行是否存在问题:Shell 两个连续的管道,shell,awk,pipe,Shell,Awk,Pipe,此命令行是否存在问题: Foo | awk '/Value1/{printf("%s,",$2)} /Value2/{printf("%s\n",$6)}' | awk '(NR % 5 == 1){print $0}' 其中Foo是一个自定义程序。这个命令过去工作正常。但是,由于最近更新了自定义发行版(基于Yocto)。它似乎不再起作用了。奇怪的是,awk'(NR%5==1){print$0}'没有执行,整个命令没有显示任何内容 有什么想法吗?提前感谢您的帮助如果Foo | cmd生成输出,
Foo | awk '/Value1/{printf("%s,",$2)} /Value2/{printf("%s\n",$6)}' | awk '(NR % 5 == 1){print $0}'
其中Foo
是一个自定义程序。这个命令过去工作正常。但是,由于最近更新了自定义发行版(基于Yocto)。它似乎不再起作用了。奇怪的是,awk'(NR%5==1){print$0}'
没有执行,整个命令没有显示任何内容
有什么想法吗?提前感谢您的帮助如果
Foo | cmd
生成输出,但Foo | cmd | awk'{print}'
没有,那么您的问题是缓冲。谷歌stdbuf行缓冲(特别请参见)并像以下那样使用它:
Foo | stdbuf -o0 awk '...' | awk '...'
第一个awk输出的行数是否超过5行?请确保Foo
的输出具有“Value1”或“Value2”。好的,第一个awk输出的是预期的连续流。实际上,即使是这个简单的命令也不起作用:Foo | awk'/Value1/{printf(“%s,”,$2)}/Value2/{printf(“%s\n”,$6)}'awk'{print$0}
@JDoe您在使用什么shell?Foo | awk'/Value1/{printf(“%s,”,$2)}/Value2/{printf(“%s\n”,$6)}>tmp和&awk'{print$0}'
有效吗?怎么样Foo | awk'/Value1/{printf(“%s,”,$2)}/Value2/{printf(“%s\n”,$6)}>>(awk'{print$0}')
?非常好的建议!第一个命令:Foo | awk'/Value1/{printf(“%s,”,$2)}/Value2/{printf(“%s\n”,$6)}
>tmp&&awk'{print$0}'Foo | awk'1'| awk'1'
works谢谢!哇。。。你救了我的命。你能解释一下原因吗?不客气。你看过我在回答中给你的参考页了吗?它详细地解释了原因。