入力ファイル内の英語のアルファベットのすべての文字の出現頻度を調べようとしています。どうすればbashスクリプトでこれを行うことができますか?
質問する
19433 次
5 に答える
31
grep
、、sort
を使用した私のソリューションuniq
。
grep -o . file | sort | uniq -c
ケースを無視する:
grep -o . file | sort -f | uniq -ic
于 2010-10-19T12:03:10.147 に答える
25
たった1つの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
于 2010-10-19T09:21:37.583 に答える
8
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
于 2010-10-19T09:28:59.110 に答える
4
ここに提案があります:
while read -n 1 c
do
echo "$c"
done < "$INPUT_FILE" | grep '[[:alpha:]]' | sort | uniq -c | sort -nr
于 2010-10-19T09:17:01.067 に答える
0
上記のmouvicielの回答に似ていますが、BSDシステムで使用されるBourneシェルとKornシェルの方が一般的ですが、置換で\nをサポートするGNUSedがない場合は、改行をバックスラッシュでエスケープできます。
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
于 2013-05-15T13:46:02.130 に答える