使用awk打印首次出现的多个文件

时间:2019-07-12 06:40:06

标签: awk

我在子目录中有.txt文件,我希望在包含字符串“ CHEESE”的行的第4列中提取字符串的第一个匹配项。

我正在使用的代码如下:

awk '/CHEESE/{print $4}' ./*/*/*.txt | pr -15s',' > ofile.csv

该命令不起作用,因为它在所有文件的特定列中打印所有出现的字符串。

我尝试添加“出口”,如下所示:

awk '/CHEESE/{print $4;exit;}' ./*/*/*.txt | pr -15s',' > ofile.csv

这打印了一个事件-但仅在一个文件中。

如何使所有文件仅打印一次?

先谢谢您。

3 个答案:

答案 0 :(得分:0)

如果您使用的是GNU awk,请尝试以下操作(由于我没有该目录结构,因此未经测试)。

awk '/CHEESE/{print $4;nextfile;}' ./*/*/*.txt | pr -15s',' > ofile.csv

或者不使用nextfile尝试一次。

awk 'FNR==1{count=1} /CHEESE/ && count==1{print $4;count++}' ./*/*/*.txt | pr -15s',' > ofile.csv

答案 1 :(得分:0)

这应该做:

awk '/CHEESE/ && f!=1 {print $4;f=1}' ./*/*/*.txt | pr -15s',' > ofile.csv

仅当未设置f时才打印。找到CHEESE时,请设置f,这样就不再打印了

答案 2 :(得分:0)

如果您使用的是gawk,则可以尝试使用nextfile语句。