利用shell顯示wordcount功能


  Shell腳本編程是Linux系統最為核心的技術之一,它能夠利用簡單的命令來實現一些復雜的功能,同時,由於Linux提供了很多文本處理命令,如grep(grep family), tr, sed, awk等, 一旦熟練掌握這些命令,那么你在Linux系統中處理文本就會得心應手。
  本文將展示如何利用Shell來實現WordCount功能。
  首先先看wordcount.sh的代碼,用來實現WordCount功能。

#!/bin/bash

# filename: wordcount.sh
# usage: word count

# handle position arguments
if [ $# -ne 1 ]
then
    echo "Usage: $0 filename"
    exit -1
fi

# realize word count
printf "%-14s%s\n" "Word" "Count"

cat $1 | tr 'A-Z' 'a-z' | \
egrep -o "\b[[:alpha:]]+\b" | \
awk '{ count[$0]++ }
END{
for(ind in count)
{ printf("%-14s%d\n",ind,count[ind]); }
}' | sort -k2 -n -r

在上述代碼中,$1參數為你輸入的文本,利用cat命令讀取其內容,利用tr命令將所有的大寫字母轉換為小寫字母,再利用egrep命令抓取文本中的所有單詞,並逐項輸出,最后利用awk命令和關聯數組來實現word count功能,並按照出現的數量遞減輸出。
  接着就是測試啦~~
  首先是road.txt文件,里面是美國詩人 Robert Frost寫的詩歌 The Road Not Taken,參考網址為:https://www.poets.org/poetsorg/poem/road-not-taken .統計該文本的每個單詞出現的數量,可以運行命令

./wordcount.sh road.txt

運行結果如下:

![](https://img-blog.csdn.net/20180326112735155?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pjbGlhbjkx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
這里只顯示了前面幾個單詞的出現數量。   再測試一個文本speech.txt,里面的內容是羅斯福總統二戰期間對日本宣戰的演講,具體網址為: http://www.historyplace.com/speeches/fdr-infamy.htm .運行命令 ```Bash ./wordcount.sh speech.txt ``` 運行結果如下:
![](https://img-blog.csdn.net/2018032611361194?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pjbGlhbjkx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
這里只顯示了前面幾個單詞的出現數量。   本次程序編寫主要參考《Linux腳本攻略》。   本次分享到此結束,歡迎大家交流~~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM