方法一:
grep -o '\(关键字1\|关键字2|关键字3\)' ur_log_file | awk '{a[$0]++} END{for (i in a) {print i"\t"a[i]; }}' | sort -nr -k2
按次数降序排的 ,要求关键词间没有包含关系。
方法二:
问题:
解答:
解释:
filename
while(<>):每次读出文件的一行,直到文件结束。读取出来的内容放入默认变量$_中。
s/A//g:把默认变量($_,就是上面读出来的)中的A字符全部(g)替换为空。这个语句返回的结果是替换成功的次数。
$count+ = s/A//g:把替换成功的次数记录在$count中。
Pint $count:
把以上放在一起就是:每次读取文件中的一行,计算其中字符A出现的次数,并累加到变量$count中。最后打印出来。
如果想统计其他的字符,直接修改A为需要统计的就可以了。
更进一步:
如果要统计各个字符出现次数,如何实现?
解答:
perl -e ‘ $/=undef;$_=<>; printf "$&:%dn", s/$&//g while /S/; ’
解释:
经过粗略的测试: 一个文本里有关键词12W, 如果用方法一,需要10秒左右, ,用方法二基本上不需要一秒..多以从速度上来说,方法二快N多