特定の文字を含むファイルの単語数を確認する

特定の文字を含むファイルの単語数を確認する

文字 "a" を含むファイルの単語数を確認する Bash コマンド

答え1

次のテストファイルがあるとしましょう。

$ cat file
the cat in the hat
the quick brown dog
jack splat

grepGNU拡張実装を採用することで、-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{}ので必要です。これは代わりにブロックを使用します。これを処理する別の方法は(ブロック内)です。ccnull0print 0+cEND{}

関連情報