如何使用Awk

时间:2019-03-04 12:47:43

标签: text awk

我有500个文本文档。在他们每个人中,“ Numero de expediente”一词至少出现一次。我想找到每个文件至少存在两次的位置。每个文件都有其自己的名称,我不确定这是否有问题(我不知道*.txt是否能在Windows的cmd中正常工作)。所以,是的,我想知道哪个文档至少包含两次该表达式,并且如果grepcat,我不知道哪个命令对此更有用。

谢谢。

3 个答案:

答案 0 :(得分:1)

编辑: 根据@kent和@tripleee先生的评论,我要在字符串出现的单行总和中+如果有人{{1} }不支持awk,我正在创建一种标记类型nextfile,如果它是TRUE,它将简单地跳过行(在任何文件中看到2个字符串实例之后)。

no_processing

OR(溶液的一种非衬里形式)

awk 'FNR==1{count=0;no_processing=""} no_processing{next} {count+=gsub("Numero de expediente","")} count==2{print FILENAME;no_processing=1}' *.txt


能否请您尝试遵循,应该与GNU awk ' FNR==1{ count=0 no_processing="" } no_processing{ next } { count+=gsub("Numero de expediente","") } count==2{ print FILENAME no_processing=1 } ' *.txt 一起使用。

awk

上面将打印例如-> awk 'FNR==1{count=0} /Numero de expediente/{count++} count==2{print FILENAME " has at least 2 instances of searched string in it.";nextfile}' *.txt ,如果您只想打印文件名,请尝试执行以下操作。

test.txt has at least 2 instances of string in it.

说明: 现在为上述代码添加说明。

awk 'FNR==1{count=0} /Numero de expediente/{count++} count==2{print FILENAME;nextfile}' *.txt

答案 1 :(得分:1)

我将使用grepawk添加另一种方式。 grep负责匹配。 awk过滤出匹配计数器> = 2的文件:

grep -o -m2 'YOUR_PATTERN' *.txt
 |awk -F: '{a[$1]++}END{for(x in a)if(a[x]>1)print x}'

注意:

  • -o在相同的行情况下可以多次出现
  • -m2将提高性能:两次匹配后,停止处理文件。
  • awk行只是建立一个哈希表,并输出匹配计数> 1的文件名

答案 2 :(得分:1)

您也可以尝试使用Perl

perl -lne ' $x++ for(/Numero de expediente/g); if($x>=2) { print $ARGV;close(ARGV);$x=0 } ' *.txt

$ x将为0,并且每次模式匹配(Numero de expediente)都会递增,即使模式在同一行中出现两次也是如此。至少有2个匹配项时,使用close(ARGV)关闭文件句柄,然后读取下一个文件。