題目:
寫乙個 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個單詞字元。而合法的 單詞字元 為大小寫字母 數字和下劃線,其它字元均認為是單詞分隔符。輸入給出一段非空文字,最後以符號 ...