如何通过awk使用grep?

时间:2014-01-09 08:26:25

标签: awk grep gawk

我正在尝试将grep应用于来自一个巨大文件的几个字符串。但是,我想通过awk脚本将该行传递给grep命令。我还希望将输出重定向到脚本。 我有一个awk脚本从文件中读取记录。我希望grep仅适用于少数记录。当前记录$ 0将是使用grep的文本。 我该怎么做?目前,我正在尝试这个 -

system("grep --count -w 'GOOD' \n" $0)

但是,它似乎不起作用。我该怎么用?

4 个答案:

答案 0 :(得分:2)

在Gnu Awk中,您可以使用\<\>来匹配单词的开头和结尾,所以

gawk '/\<GOOD\>/{++i} END{print i}'

将与

相同
grep -wc 'GOOD' file

如果要计算单词GOOD中出现的总次数(不仅是行数,还包括给定行/记录中的出现次数),您可以在Gnu Awk中使用FPAT版本4,如

gawk 'BEGIN { FPAT="\\<GOOD\\>"; RS="^$" } { print NF }' file

如果要计算给定记录中短语GOOD DI的完全匹配数,例如记录号3,则可以使用

gawk 'NR==3 { print patsplit($0,a,/GOOD DI/) }' file

答案 1 :(得分:1)

你的问题不是很清楚,如果你展示了一些输入文件,你到目前为止的整个脚本以及想要实现的输出,它会有所帮助。

与此同时,由于您的问题中没有任何内容可以提出相反的建议,您可以执行以下操作:

awk 'somescript' somefile | grep --count -w 'GOOD DI' 

答案 2 :(得分:1)

您无法在文本字符串上应用grep,这就是您正在执行的操作。如果您确实需要使用grep / system,则需要以下内容:

system(“echo'”$ 0“'| grep --count -w'foo'”)

但是这也不好,因为计数只计算它出现的行数而不是你所追求的行数。或者看起来如此。

如果您使用正则表达式作为拆分分隔符,则会得到拆分次数+1。

以下是可行的:

awk '{printf FNR; a=split($0,myarray,/.OOD/); print "  "a-1}' file.txt

这会打印每个亚麻布,并显示正则表达式的出现次数。 (在这种情况下“.OOD”。代表好,食物,情感等)

答案 3 :(得分:0)

你可以用旧时尚的方式做到这一点

awk 'BEGIN{count=0} {
  for( i=1;i<=NF; i++)  {
    if( $i == "GOOD" ){
       ++count
    }
  }
}END {
  print count
}' file