題目:
寫一個 bash 腳本以統(tǒng)計一個文本文件 words.txt 中每個單詞出現(xiàn)的頻率。
為了簡單起見旬牲,你可以假設(shè):
words.txt只包括小寫字母和 ' ' 仿粹。
每個單詞只由小寫字母組成。
單詞間由一個或多個空格字符分隔原茅。
示例:
假設(shè) words.txt 內(nèi)容如下:
the day is sunny the the
the sunny is is
你的腳本應(yīng)當(dāng)輸出(以詞頻降序排列):
the 4
is 3
sunny 2
day 1
說明:
不要擔(dān)心詞頻相同的單詞的排序問題吭历,每個單詞出現(xiàn)的頻率都是唯一的。
你可以使用一行 Unix pipes 實現(xiàn)嗎擂橘?
鏈接:https://leetcode-cn.com/problems/word-frequency
思路:
1晌区、本題主要考察linux中的常用命令,tr通贞、sort朗若、uniq、awk
Linux命令如下:
cat words.txt | tr -s ' ' '\n' | sort | uniq -c | sort -r | awk '{print $2" "$1}'
其中:
cat ——瀏覽文件
tr -s ——替換字符串(空格換為換行)保證了一行一個單詞
sort ——默認(rèn)ASCII值排序昌罩,排序號后還會有重復(fù)
uniq —— 去重哭懈,-c再輸出重復(fù)次數(shù)。結(jié)果就是 ”4 abc“ abc出現(xiàn)了4次
sort -r —— 反向排序茎用,也就是從大到小遣总。得到按頻率高低的結(jié)果
awk ——格式化輸出,規(guī)定輸出是先字符串再重復(fù)次數(shù)轨功,所以先$2再$1旭斥,中間空格分隔