如何在文件中显示匹配的字符串和unix中匹配字符串的计数

时间:2017-08-23 08:45:59

标签: unix count grep

我试过以下

grep 'test' testdoc|wc -l 

我得到了匹配字符串的数量。但我需要得到计数并打印匹配的线。任何人都可以帮助我。

3 个答案:

答案 0 :(得分:1)

awk

grep 'test' testdoc|awk 'END{print NR}1'

awk中, 1 始终评估为true,它执行默认操作{print $0} - 打印存储在$0

中的当前行

NR 是当前记录/行的编号,在 END块(或文件的最后一行)是文件中的行数。

执行所有 awk 代码后执行

END 块。所以这是要执行的最后一个 awk 代码。

答案 1 :(得分:1)

像这样:

section

grep pattern file | tee >(wc -l) 打印找到的所有行tee,然后将它们传递给计算行数的进程。它就像管道中的grep关节,水在一侧流出,另外两个流出 - 即分流器。

请注意,这称为"流程替换" ,并且是T特定的构造,bash和{{1}之间没有空格}}

您也可以使用>这样做:

(

那说...... "如果该行与awk匹配,则打印它并递增awk '/pattern/{print;n++} END{print n+0}' file 。最后,打印pattern - 添加零后,如果没有匹配则确保它是一个不是空字符串的数字。"

答案 2 :(得分:1)

grep 'test' testdoc|wc -l 

计算模式出现的行数,它等于

grep -c 'test' testdoc

要考虑每行多个匹配项,请使用选项-o

grep  -o 'test' testdoc|wc -l

要获得两行和计数,您可以使用tee输出到临时文件f并将f的结果追加到grep

grep "test" testdoc |tee >(wc -l 1>&f)|grep -o "test"|wc -l 1>>f && cat f

# or to get both outputs in a line:
grep "test" testdoc |tee >(wc -l|tr '\n' ' ' 1>&f)|grep -o "test"|wc -l 1>>f && cat f

这是另一种不使用grep的解决方案(因为在某些发行版中缺少-o选项)

awk 'BEGIN{lCount=0;count=0}{c=gsub(/test/,"");count+=c;if(c)lCount+=1;}END{print(lCount,count)}' testdoc