/ / Unix文字の組み合わせを含む単語の数をカウントするコマンド(繰り返しとその間の文字を含む) - unix、grep

Unix文字の組み合わせを含む単語の数をカウントするコマンド(リピートと文字の間にある) - unix、grep

あなたはどのようにテキストの単語の数を数えますか?a、b、cのすべての文字を含むファイル。これらの文字は単語に複数回現れることがあり、単語には他の文字も含まれている可能性があります。 (たとえば、「cabby」はカウントする必要があります)。

2を返すサンプル入力を使用する:

abc abb cabby

私は両方を試みた:

grep -E "[abc]" test.txt | wc -l

grep "abcdef" testCount.txt | wc -l

どちらも2の代わりに1を返します。

前もって感謝します!

回答:

回答№1は1

あなたは使うことができます awk の戻り値を使用します。 sub 関数。置換が成功した場合は、 sub 関数は置換の回数になります。

$ echo "abc abb cabby" |
awk "{
for(i=1;i<=NF;i++)
if(sub(/a/,"",$i)>0 && sub(/b/,"",$i)>0 && sub(/c/,"",$i)>0) {
count+=1
}
}
END{print count}"
2

我々は、3つのアルファベットのすべてについて、戻り値の条件を0より大きく保つ。ザ for loop 3つのアルファベットがすべて単語に含まれている場合、カウンタを追加するすべての行のすべての単語に対して繰り返します。


回答№2の場合は1

私はあなたが複数の呼び出しを使用して周りを回ることはできないと思います grep。だから私は(GNU grep)と一緒に行くだろう:

<file grep -ow "w+" | grep a | grep b | grep c

出力:

abc
cabby

最初 grep 各単語をそれ自身の行に置きます。


回答№3の場合は0

これを試して、それは動作します

sed "s / / n / g" test.txt | grep a | grep b | grep c

$ cat test.txt

abc abb cabby

$ sed "s / / n / g" test.txt | grep a | grep b | grep c

abc キャベビー

お役に立てれば..