192. 統計詞頻
阿新 • • 發佈:2019-02-10
寫一個 bash 指令碼以統計一個文字檔案 words.txt
中每個單詞出現的頻率。
為了簡單起見,你可以假設:
words.txt
只包括小寫字母和' '
。- 每個單詞只由小寫字母組成。
- 單詞間由一個或多個空格字元分隔。
示例:
假設 words.txt
內容如下:
the day is sunny the the
the sunny is is
你的指令碼應當輸出(以詞頻降序排列):
the 4
is 3
sunny 2
day 1
說明:
- 不要擔心詞頻相同的單詞的排序問題,每個單詞出現的頻率都是唯一的。
解析:
1、sort語法複習
sort -n 將字串轉數字
sort -r 指定順序為從大到小
sort -k 2 指定第二個欄位作為排序判斷標準
tr -s ' ' '\n'
是將所有連續的空格 空行刪除並保證每一行只有一個字串 sort | uniq -c
通常一起用來統計重複出現的次數。
cat words.txt | tr -s ' ' '\n' | sort | uniq -c | sort -rn | awk '{print $2, $1}'
2、 awk 是逐行檢索文字。分為3的部分。 BEGIN{#這裡進行一些檢索文字前的初始化操作}
{#這裡是對應每一行的操作}
。
例如這裡 for(i=1;i<=NF;++i){++m[$i]}
就是將每一行分隔的欄位,進行詞頻統計。
NF是分隔的欄位數。
$0表示整行字串 $1到$NF
awk中的陣列可以用作hashtable做來詞頻統計。
END{#在檢索文字後的操作}
for(k in m)
k表示的就是m的key。
awk -F' ' '{for(i=1;i<=NF;i=i+1){print $i}}' words.txt|sort|uniq -c|sort -nr|awk -F ' ' '{printf("%s %s\n", $2, $1)}'