awk命令输出到文本文件

时间:2013-12-26 17:33:49

标签: linux bash shell awk

我知道如何使用>将简单awk代码的输出写入文本文件,或使用>>

将其附加到文本文件中

但这里的问题不同,

这是我的代码行,其输出需要写在文本文件中,

stty -F /dev/ttyUSB0 ispeed 4800 && awk -F"," '/SUF/ {print $3,$4,$5,$6,$10,$11,substr($2,1,2),".",substr($2,3,2),".",substr($2,5,2)}' < /dev/ttyUSB0

此处-F用于定义字段分隔符,即,,上述行旨在搜索与SUF匹配的任何内容并打印其第3,第4,第5,第6,第10和第11价值, 以及第二个值的某些部分......这些值是从USB设备/dev/ttyUSB0

中读取的

上面的命令工作正常并给出了正确的输出,

以下是示例输出

SUF Third Fourth Fifth Sixth Tenth Eleventh AA.BB.CC
SUF Third Fourth Fifth Sixth Tenth Eleventh AA.BB.CC
SUF Third Fourth Fifth Sixth Tenth Eleventh AA.BB.CC
SUF Third Fourth Fifth Sixth Tenth Eleventh AA.BB.CC
SUF Third Fourth Fifth Sixth Tenth Eleventh AA.BB.CC
SUF Third Fourth Fifth Sixth Tenth Eleventh AA.BB.CC
SUF Third Fourth Fifth Sixth Tenth Eleventh AA.BB.CC

问题是,输出不会停止,并且它的形式类似于无限循环,我必须按CTRL+C才能终止它。

现在真正的问题, 如何将此输出写入文本文件?

尝试:

到目前为止,我已尝试将此输出写入文本文件

stty -F /dev/ttyUSB0 ispeed 4800 && awk -F"," '/SUF/ {print $3,$4,$5,$6,$10,$11,substr($2,1,2),".",substr($2,3,2),".",substr($2,5,2)}' < /dev/ttyUSB0 > outputfile.txt

它会创建一个名为outputfile.txt的输出文件,但它不会在其中写入任何内容。

这意味着我根本无法在文本文件中编写输出。我怎么能把这个输出的前几行写入文件文本文件?

如果终端无法使用,是否可以使用Python运行相同的命令并将输出写入文本文件并终止它?

2 个答案:

答案 0 :(得分:3)

您的输出可能已缓冲,并且在刷新缓冲区之前停止代码。通过强制awk仅处理多个记录,它将正常退出并写入缓冲的输出。

尝试强制awk通过检查记录计数来处理它遇到的前十个。

stty -F /dev/ttyUSB0 ispeed 4800 && awk -F"," '/SUF/ and NR < 10 {print $3,$4,$5,$6,$10,$11,substr($2,1,2),".",substr($2,3,2),".",substr($2,5,2)} NR > 9 {exit}' < /dev/ttyUSB0 > outputfile.txt

NR计算相对于awk启动时读取的第一条记录的当前记录号。当NR大于9时,它将退出。如果您只打印一次/SUF/,则可以在打印后立即退出。

stty -F /dev/ttyUSB0 ispeed 4800 && awk -F"," '/SUF/ {print $3,$4,$5,$6,$10,$11,substr($2,1,2),".",substr($2,3,2),".",substr($2,5,2); exit}' < /dev/ttyUSB0 > outputfile.txt

答案 1 :(得分:1)

您正在对正在连续写入的文件运行awk。在什么时候你想要停止阅读文件?也许你想要做的是这样的事情:

stty -F /dev/ttyUSB0 ispeed 4800 &&
cp /dev/ttyUSB0 tmp && 
awk -F"," '/SUF/ {print $3,$4,$5,$6,$10,$11,substr($2,1,2),".",substr($2,3,2),".",substr($2,5,2)}' tmp

所以你拍摄文件的快照并在那上面运行awk?