我有500个文本文档。在他们每个人中,“ Numero de expediente”一词至少出现一次。我想找到每个文件至少存在两次的位置。每个文件都有其自己的名称,我不确定这是否有问题(我不知道*.txt
是否能在Windows的cmd中正常工作)。所以,是的,我想知道哪个文档至少包含两次该表达式,并且如果grep
或cat
,我不知道哪个命令对此更有用。
谢谢。
答案 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)
我将使用grep
和awk
添加另一种方式。 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
将提高性能:两次匹配后,停止处理文件。答案 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)关闭文件句柄,然后读取下一个文件。