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

如何在文件中显示匹配字符串以及unix中匹配字符串的计数,unix,count,grep,Unix,Count,Grep,我已经试过了 grep 'test' testdoc|wc -l 我正在获得匹配字符串的计数。但我需要得到计数并打印匹配的行。有人能帮我吗。用awk: grep 'test' testdoc|awk 'END{print NR}1' 在awk中,1始终计算为true,它执行默认操作{print$0}-打印存储在$0中的当前行 NR是当前记录/行的编号,结束块中(或文件的最后一行)是文件中的行数 END块在执行所有awk代码后执行。这是最后一个执行的awk代码。使用awk: grep 'te

我已经试过了

grep 'test' testdoc|wc -l 

我正在获得匹配字符串的计数。但我需要得到计数并打印匹配的行。有人能帮我吗。

awk

grep 'test' testdoc|awk 'END{print NR}1'
awk
中,1始终计算为true,它执行默认操作
{print$0}
-打印存储在
$0
中的当前行

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


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

使用
awk

grep 'test' testdoc|awk 'END{print NR}1'
awk
中,1始终计算为true,它执行默认操作
{print$0}
-打印存储在
$0
中的当前行

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

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

如下:

grep pattern file | tee >(wc -l)
tee
打印找到的所有行
grep
,然后将它们也传递给计算行数的进程。这就像管道中的一个
T
接头,水从一边流入,从另一边流出,即一个分离器

请注意,这称为“进程替换”,是特定于bash的
构造,在
之间没有空格


您也可以使用
awk
这样做:

awk '/pattern/{print;n++} END{print n+0}' file
也就是说……“如果该行匹配
模式
,则打印该行并递增
n
。最后,在添加零后打印
n
,以确保如果没有匹配项,则该行不是空字符串。”

如下所示:

grep pattern file | tee >(wc -l)
tee
打印找到的所有线条
grep
,然后将它们传递给一个计算线条的过程。这就像管道中的一个
T
接头,水从一侧流入,从另一侧流出,即分离器

请注意,这称为“进程替换”,是特定于bash的
构造,在
之间没有空格


您也可以使用
awk
这样做:

awk '/pattern/{print;n++} END{print n+0}' file
也就是说……“如果该行匹配
模式
,则打印该行并递增
n
。最后,在添加零后打印
n
,以确保如果没有匹配项,则该行是一个数字而不是空字符串。”

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

grep -c 'test' testdoc
要考虑每行的多个匹配项,请使用选项
-o

grep  -o 'test' testdoc|wc -l
要同时获得行数和计数,可以使用
tee
输出到临时文件
f
,并将第二个
grep
的结果附加到
f

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
选项)

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

grep -c 'test' testdoc
要考虑每行的多个匹配项,请使用选项
-o

grep  -o 'test' testdoc|wc -l
要同时获得行数和计数,可以使用
tee
输出到临时文件
f
,并将第二个
grep
的结果附加到
f

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
选项)


谢谢mark。但是出现以下错误。“缺少重定向的名称”您是否使用
bash
?您是否在我的命令中删除了额外的空格?谢谢mark。但是出现以下错误。“缺少重定向的名称”您是否在使用
bash
?您是否在我的命令中删除了额外的空格?不客气。如果有帮助,您可以接受(并向上投票)我的答案。^^^@tso:你能解释一下
awk'END{print NR}1'
部分吗?不客气。如果有帮助,你可以接受(并向上投票)我的答案。^^^@tso:你能解释一下
awk'END{print NR}1'
部分吗?