awk詞頻統計功能


[root@test88 ~]# vim word_freq.sh

#!/bin/bash
if [ $# -ne 1 ];then
    echo "Usage: $0 filename";
    exit -1
fi

filename=$1

egrep -o "\b[[:alpha:]]+\b" $filename | awk '{count[$0]++}END{printf("%-14s%s\n","Word","Count");for (ind in count){ printf("%-14s%d\n",ind,count[ind]);}}'


[root@test88 ~]# sh word_freq.sh test.txt 
Word          Count
test          1
oldboy        1
liyong        1


#egrep -o 表示只打印匹配到的字符,由換行符分割
#\b是正則表達式里的單詞邊界符,位於能構成單詞的字符(字母數字下划線)和不能構成單詞的字符之間
#比如一段文本:
[root@test88 ~]# vim boundary.txt

peter 2is learning linux.

[root@test88 ~]# egrep -o  "[[:alpha:]]+" boundary.txt 
peter
is
learning
linux

[root@test88 ~]# egrep -o  "\b[[:alpha:]]+\b" boundary.txt 
peter
learning                 #is沒匹配出來
linux

#顯然單詞邊界的作用在於先划定一段區域,從非單詞部分開始到非單詞部分結束,然后看區域內容是否匹配。從而能保證連續的一段內一定全是字母,沒有數字或者下划線。通常寫單詞都是一個單詞空一個,如果單詞內出現數字或下划線就不認為是單詞。如果不加\b實際上匹配的是一串連續字母。

#count是一個關聯數組,count[$0]表示索引為$0的值,當使用count[$0]++的時候,count[$0]的值默認為0的整型,而且這個值是變化的,索引每重復一次,值就加一。

 


免責聲明!

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



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