LeetCode191 統計詞頻

2021-08-25 14:31:26 字數 1410 閱讀 2366

寫乙個 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...