寫乙個 bash 指令碼以統計乙個文字檔案 words.txt 中每個單詞出現的頻率。
為了簡單起見,你可以假設:
words.txt只包括小寫字母和 』 』 。
每個單詞只由小寫字母組成。
單詞間由乙個或多個空格字元分隔。
示例:假設 words.txt 內容如下:
dayis sunny the
thethe sunny is
is你的指令碼應當輸出(以詞頻降序排列):4is
3sunny 2
day1
說明:
不要擔心詞頻相同的單詞的排序問題,每個單詞出現的頻率都是唯一的。
你可以使用一行 unix pipes 實現嗎?
**實現:
方法一;
# read from the file words.txt and output the word frequency list to stdout.
cat words.txt | sed 's/ /\n/g' | sed '/^$/d' | sort | uniq -c | awk '' | sort -nrk2
解析:
使用sed將空格替換成換行,並且刪除空白行
然後使用sort進行排序然後統計出詞頻
最後將結果以答案要求的方式輸出
方法二:
cat words.txt | tr -s ' '
'\n' | sort | uniq -c | sort -rn | awk ''
1、sort語法複習
sort -n 將字串轉數字
sort -r 指定順序為從大到小
sort -k 2 指定第二個字段作為排序判斷標準
tr -s 』 』 『\n』 是將所有連續的空格 空行刪除並保證每一行只有乙個字串
sort | uniq -c 通常一起用來統計重複出現的次數。
方法三:
awk -f
' ''}' words.txt|sort|uniq -c
|sort -nr
|awk -f
' '''
awk 是逐行檢索文字。分為3的部分。
begin
。 例如這裡 for(i=1;i<=nf;++i)就是將每一行分隔的字段,進行詞頻統計。
nf是分隔的字段數。
i]}就是將每一行分隔的字段,進行詞頻統計。 nf是分隔的字段數。
0表示整行字串 1到
1
到nf表示從分隔的第乙個字串到最後乙個字串
awk中的陣列可以用作hashtable做來詞頻統計。
end
for(k in m) k表示的就是m的key。
Leetcode191 位1的個數
題目 編寫乙個函式,輸入是乙個無符號整數,返回其二進位制表示式中數字位數為 1 的個數 也被稱為漢明重量 輸入 11111111111111111111111111111101 輸出 31 解釋 輸入的二進位制串 11111111111111111111111111111101 中,共有 31 位為...
LeetCode 191 位1的個數
題意 編寫乙個函式,輸入是乙個無符號整數,返回其二進位制表示式中數字位數為 1 的個數 也被稱為漢明重量 lowbit n 定義為非負整數 n nn 在二進位制表示下最低位的 1 11 及其後邊所有的 0 00 構成的數值。方法一 n n 1 作用 將 n nn 的二進位制表示中最低位的 1 11 ...
LeetCode191 位1的個數
編寫乙個函式,輸入是乙個無符號整數,返回其二進位制表示式中數字位數為 1 的個數 也被稱為漢明重量 輸入 00000000000000000000000000001011 輸出 3 解釋 輸入的二進位制串 00000000000000000000000000001011 中,共有三位為 1 輸入 0...