我有一个包含大量类似字符串的文件。我想计算一个正则表达式的独特出现次数,并且还显示它们是什么,例如对于文件上的模式Profile: (\w*)
:
Profile: blah
Profile: another
Profile: trees
Profile: blah
我想发现有3次出现,并返回结果:
blah, another, trees
答案 0 :(得分:6)
试试这个:
egrep "Profile: (\w*)" test.text -o | sed 's/Profile: \(\w*\)/\1/g' | sort | uniq
输出:
another
blah
trees
<强>描述强>
带有egrep
选项的 -o
将获取文件中的匹配模式。
sed
只会获取捕获部分
sort
后跟uniq
将提供唯一元素列表
要获取结果列表中的元素数,请使用wc -l
egrep "Profile: (\w*)" test.text -o | sed 's/Profile: \(\w*\)/\1/g' | sort | uniq | wc -l
输出:
3
答案 1 :(得分:1)
awk '{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
如果你想在输出中有计数(3):
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