一言に文字が何回登場しますか?

一言に文字が何回登場しますか?

単語内の各文字が表示される回数を探したいです。例えば

入力する
aabbbddd 
出力
a@2 b@3 c@0 d@3

シェルスクリプトを使用してこれをどのように実行できますか?

ベストアンサー1

seduniqおよび以下を使用できますsort

$ echo -n "aabbbddd" | sed 's/\(.\)/\1\n/g'| sort | uniq -c
  2 a
  3 b
  3 d

上記のコードはsed各文字を取得し、独自の+改行文字()で置き換えます\n。これで、各文字が改行文字に配置されているので、それを使用してuniq -c文字数を数えることができます。

メモ:この方法では、間に0回発生する文字は表示されません。

または、各文字の数を表示します。

$ s="aabbbddd"; for i in {a..z}; do
     v=$(echo -n "$s" | grep -oi $i | wc -l); echo "$i : $v"; done
a : 2
b : 3
c : 0
d : 3
e : 0
f : 0
g : 0
h : 0
i : 0
j : 0
k : 0
l : 0
m : 0
n : 0
o : 0
p : 0
q : 0
r : 0
s : 0
t : 0
u : 0
v : 0
w : 0
x : 0
y : 0
z : 0

これは、アルファベットのすべての文字を繰り返すことによって行われます。

 for i in {a..z}; do .... ; done

ループを繰り返すたびに、文字列を介して特定の文字を検索し、一致するもののみを返す-oオプションを使用します。次に、見つかった各文字の発生回数を数えてgrep変数に保存します。次に、各反復を表示します。wc -l$v

 echo "$i : $v"

メモ:このメソッドは、順序が正しくない文字列を処理できます。

おすすめ記事