SHELL篇 統計詞頻

2021-10-02 07:32:51 字數 1497 閱讀 3495

題目:

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

說明:

不要擔心詞頻相同的單詞的排序問題,每個單詞出現的頻率都是唯一的。

你可以使用一行 unix pipes 實現嗎?

解題方法:

awk '} end}' words.txt | sort -nr -k2
要看懂上面的解題方法,需要明白的是:

1、awk是個行編輯器,這個相當重要。

2、在awk中,當字串或者空字串參與數值運算時,都會被當做0參與運算,比如:

[root@syztoo ~]# awk 'begin' test.txt  

1

3、在awk中,當引用陣列中乙個不存在的元素時,awk會自動建立這個元素,並為其賦值為空字串,比如:

[root@syztoo ~]# awk 'begin' test.txt

1# 第一次引用陣列不存在的元素,所以賦值為空字串;第二次將空字串當做0參於數值運算,所以列印1

4、在awk中,nf表示按分隔符分隔後的列數,$n表示當前行的第n列內容,所以:

for(n=1;n<=nf;n++)}

# 表示遍歷當前行的每乙個字段,同時將字段作為word陣列的索引,進行儲存,並做累加計算

# 比如行內容為:the sunny is is

# 那麼經過上面**處理後,word陣列儲存的是:word[the]=1,word[sunny]=1,word[is]=2

5、end 表示所有行處理完以後,需要執行的**塊,這裡:

end}

# 上面**是列印陣列的索引和陣列元素,i為索引,word[i]為元素

6、sort命令:

選項:

-n 表示按數值排序,從小到大

-r 表示反轉排序順序

-k 後面跟乙個數字,表示按第幾列內容進行排序

-t 指定分隔符,不指明-t時,表示預設按乙個空格分隔

Shell例題 192 統計詞頻

words.txt只包括小寫字母和 每個單詞只由小寫字母組成。單詞間由乙個或多個空格字元分隔。假設 words.txt 內容如下 the day is sunny the the the sunny is is你的指令碼應當輸出 以詞頻降序排列 the 4is3 sunny 2 day1不要擔心詞頻...

使用shell實現簡單的詞頻統計

統計如下中第二列單詞出現的次數 1,huabingood,100 2,haha,200 3,huabingood,300 4,haha,100 5,haha,200 cat a.txt awk f sort uniq c sort nrk 1 解釋 awk f 將資料按照逗號進行分割,並取出第二列的...

PTA 詞頻統計

請編寫程式,對一段英文文字,統計其中所有不同單詞的個數,以及詞頻最大的前10 的單詞。所謂 單詞 是指由不超過80個單詞字元組成的連續字串,但長度超過15的單詞將只擷取保留前15個單詞字元。而合法的 單詞字元 為大小寫字母 數字和下劃線,其它字元均認為是單詞分隔符。輸入給出一段非空文字,最後以符號 ...