文字 "a" を含むファイルの単語数を確認する Bash コマンド
答え1
次のテストファイルがあるとしましょう。
$ cat file
the cat in the hat
the quick brown dog
jack splat
grep
GNU拡張実装を採用することで、-o
以下を含むすべての単語を検索できますa
。
$ grep -wo '[[:alnum:]]*a[[:alnum:]]*' file
cat
hat
jack
splat
私たちは次の単語を数えることができます:
$ grep -wo '[[:alnum:]]*a[[:alnum:]]*' file | wc -l
4
答え2
POSIX的に:
<file tr -s '[:space:]' '[\n*]' | grep -c a
ここでは、性格空白以外の文字のシーケンスです。
答え3
これがPerl方式です:
perl -0lnE 'say scalar grep(/a/,split(/\s/,$_));' file
別の方法がありますawk
:
awk '{for(i=1;i<=NF;i++){if($(i)~/a/){k++}}}END{print k}' file
答え4
awk 'BEGIN{RS="[[:space:][:punct:]]"; c=0}
index($0,"a"){c++}
END{print c}'
awk
複数の文字をサポートするバージョンを使用してください右エココードS区切り文字()は、GNU awkのように、各レコードが1つの単語を読み取ることをRS
可能にします。awk
この記録ではindex(in, string)
機能検索in
初めてstring
、そしてリターン1に基づいて文字の位置を見つけます。見つからないindex()
場合0。したがって、戻り値はブール条件テスト(0 = false、0ではない= true)と見なすことができます。これは正規表現検索ではありません。
一致するものが見つかると、変数は1()c
ずつ増加します。c++
c=0
ブロックは絶対に増加しないBEGIN{}
ので必要です。これは代わりにブロックを使用します。これを処理する別の方法は(ブロック内)です。c
c
null
0
print 0+c
END{}