1. 程式人生 > 其它 >leetcode--shell練習之詞頻統計

leetcode--shell練習之詞頻統計

技術標籤:Shellshellleetcodelinuxawk

題目

寫一個 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 實現嗎?

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/word-frequency
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

答案

# 首先查詢出此文字的內容
cat words.txt 

在這裡插入圖片描述

# 其次將空格和換行符來進行替換,一行只有一個詞
cat words.txt | tr -s " " "\n" 

在這裡插入圖片描述

# 需要將雜亂無章的資料進行排序
cat words.txt | tr -s " " "\n" | sort 

在這裡插入圖片描述

# 將重複的資料進行去重,-c可以查出有多少次重複次數,但是順序是反的
cat words.txt | tr -s " " "\n" | sort | uniq -c

在這裡插入圖片描述

# 上面詞語沒有按照順序進行排序,所以用sort -r 進行倒序排序,從大到小排序
cat words.txt | tr -s " " "\n" | sort | uniq -c | sort -r 

在這裡插入圖片描述

# 用awk 對結果進行左右順序調換
cat words.txt | tr -s " " "\n" | sort | uniq -c | sort -r | awk '{print$2
" " $1}'

在這裡插入圖片描述