ファイル内の正確な文字列の数をリストする

ファイル内の正確な文字列の数をリストする
  11111  1  11  1111111    1 1  1  1 1 1 1  111 1  1 1  1  11 11111111   1    11 1 11 11  1 11111   1 1 

私は、図のようなファイルを持っていますが、規模はもっと大きいです。私の目標は、ファイル内の 111、1、11、1111 などの数を出力することです。私は、次のようなことをする投稿をたくさん見てきました:

grep "\^word\" text_file
grep "\bword\b" text_file
grep -Fx "word" text_file
and so on...

これらすべては、何も出力しないか、ファイル全体を出力します。特定の数字だけをリストするにはどうすればよいでしょうか?

答え1

tr、および を使用するsortuniq:

$ tr -s ' ' '\n' <file | sort | uniq -c
   1
  17 1
   5 11
   1 111
   2 11111
   1 1111111
   1 11111111

これにより、1 つの空行 (上記の出力の最初の行) もカウントされますが、次のようにしてこれを回避できますsed

$ tr -s ' ' '\n' <file | sed '/^$/d' | sort | uniq -c
  17 1
   5 11
   1 111
   2 11111
   1 1111111
   1 11111111

パイプラインはすべてのスペースを改行に変更し、結果の行をソートし、各行の出現回数をカウントします。

答え2

この場合は grep ではなく awk を使用します。

$ a="11111  1  11  1111111    1 1  1  1 1 1 1  111 1  1 1  1  11 11111111   1    11 1 11 11  1 11111   1 1"

$ awk '{for (i=1;i<=NF;i++) ++seen[$i]}END{for (k in seen) print k,"found:"seen[k]}' <<<"$a"
1 found:17
11 found:5
111 found:1
11111 found:2
1111111 found:1
11111111 found:1

この1行のデモはファイル全体で動作するはずです(<<<"$a"に置き換えてくださいyourfile

関連情報