[英]Bash script to find the frequency of every letter in a file
我試圖找出輸入文件中英文字母中每個字母的出現頻率。 我怎樣才能在bash腳本中執行此操作?
我的解決方案使用grep
, sort
和uniq
。
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
sed
, sort
和uniq
解決方案:
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.