1. 程式人生 > >linux 統計關鍵字在檔案中出現的次數

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多