linux 統計關鍵字在檔案中出現的次數
方法一:
grep -o '\(關鍵字1\|關鍵字2|關鍵字3\)' ur_log_file | awk '{a[$0]++} END{for (i in a) {print i"\t"a[i]; }}' | sort -nr -k2
按次數降序排的 ,要求關鍵詞間沒有包含關係。
方法二:
問題:
UNIX/Linux裡如何統計檔案裡某個字元出現的次數?例如在檔案mydoc.txt中,字元A出現了幾次?
解答:
perl -e 'while(<>) {$count+= s/關鍵詞//g;} print "$count"; ' filename
解釋:
perl -e ‘xxxxx……’ 表示執行單引號中的指令
filename 表示要處理的物件是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/; ’ filename
解釋:
建議參考perl文件中perlvar部分。
經過粗略的測試: 一個文本里有關鍵詞12W, 如果用方法一,需要10秒左右, ,用方法二基本上不需要一秒..多以從速度上來說,方法二快N多