我有一个包含大量相似字符串的文件。我想要计算正则表达式的唯一出现次数,并显示它们是什么,例如对于该文件上的模式Profile: (\w*)
:
Profile: blah
Profile: another
Profile: trees
Profile: blah
我想查找三个匹配项,并返回结果:
blah, another, trees
试试这个:
egrep "Profile: (\w*)" test.text -o | sed 's/Profile: \(\w*\)/\1/g' | sort | uniq
输出:
another
blah
trees
描述
使用带有 -o
选项的 egrep
可以在文件中获取匹配模式。
sed
只会获取捕获部分。
sort
后跟 uniq
将给出一个唯一元素列表。
要获取结果列表中的元素数量,请将命令附加上 wc -l
。
egrep "Profile: (\w*)" test.text -o | sed 's/Profile: \(\w*\)/\1/g' | sort | uniq | wc -l
输出:
3
grep|sed|sort|uniq
四个进程的组合...如果OP想要计数,我猜wc
也可以加入派对? - Kentawk
,我会尝试去理解它。 - jkshahawk '{a[$2]}END{for(x in a)print x}' file
将会在您的示例上进行工作
kent$ echo "Profile: blah
Profile: another
Profile: trees
Profile: blah"|awk '{a[$2]}END{for(x in a)print x}'
another
trees
blah
awk '{a[$2]}END{print "count:",length(a);for(x in a)print x }' file
使用相同的示例:
kent$ echo "Profile: blah
Profile: another
Profile: trees
Profile: blah"|awk '{a[$2]}END{print "count:",length(a);for(x in a)print x }'
count: 3
another
trees
blah
Nomatch: nomatch
后失败,会产生虚假通过。这里 OP 想要的是只匹配 Profile: (\w*)
的行。 - jkshahawk
完全不熟悉。 - jkshahgrep
的 ;) sed|sort|uniq
将会起作用。 - jkshah
NoMatch: nomatch
这一行不应该出现在结果中。请确认一下。如果是这样,请在示例中添加这样的负面字符串,以便您不会得到错误的结果。 - jkshah