簡體   English   中英

Bash腳本用於查找文件中每個字母的頻率

[英]Bash script to find the frequency of every letter in a file

我試圖找出輸入文件中英文字母中每個字母的出現頻率。 我怎樣才能在bash腳本中執行此操作?

我的解決方案使用grepsortuniq

grep -o . file | sort | uniq -c

忽略大小寫:

grep -o . file | sort -f | uniq -ic

只有一個awk命令

awk -vFS="" '{for(i=1;i<=NF;i++)w[$i]++}END{for(i in w) print i,w[i]}' file

如果你想要不區分大小寫,請添加tolower()

awk -vFS="" '{for(i=1;i<=NF;i++)w[tolower($i)]++}END{for(i in w) print i,w[i]}' file

如果你只想要角色,

awk -vFS="" '{for(i=1;i<=NF;i++){ if($i~/[a-zA-Z]/) { w[tolower($i)]++} } }END{for(i in w) print i,w[i]}' file

如果您只想要數字,請更改/[a-zA-Z]//[0-9]/

如果您不想顯示unicode,請export LC_ALL=C

sedsortuniq解決方案:

sed 's/\(.\)/\1\n/g' file | sort | uniq -c

這會計算所有字符,而不僅僅是字母。 您可以過濾掉:

sed 's/\(.\)/\1\n/g' file | grep '[A-Za-z]' | sort | uniq -c

如果您想將大寫和小寫視為相同,只需添加翻譯:

sed 's/\(.\)/\1\n/g' file | tr '[:upper:]' '[:lower:]' | grep '[a-z]' | sort | uniq -c

這是一個建議:

while read -n 1 c
do
    echo "$c"
done < "$INPUT_FILE" | grep '[[:alpha:]]' | sort | uniq -c | sort -nr

類似於上面的mouviciel的答案,但對於BSD系統上使用的Bourne和Korn shell更通用,當你沒有GNU sed,它支持替換中的\\ n時,你可以反斜杠轉義換行符:

sed -e's/./&\
/g' file | sort | uniq -c | sort -nr

或者為了避免屏幕上的可視分割,請按CTRL + V CTRL + J類型插入文字換行符

sed -e's/./&\^J/g' file | sort | uniq -c | sort -nr

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM