重なり合うパターンの Grep

重なり合うパターンの Grep

aa非常に大きなファイルで繰り返されるパターンの数を数えたいです。だから、次のコマンドを使用します。

grep -o "aa" ./bwt/dblp.txt | wc -l

たとえば、文字列がない場合は機能し、aaa1つのパターンにのみ一致します。私のユースケースでは、aパターンを表すために最初の2秒が必要ですが、2番目のパターンにaなるには最後の2秒が必要です(中央のaパターンをaaa再利用できることを意味します)。

この目標をどのように達成できますか?

ファイルがかなり大きいので、可能であれば、「最適化された」方法がより良いです。それにもかかわらず、実行可能なすべてのソリューションは明らかに歓迎されています。

ベストアンサー1

これにはPerl正規表現が必要です。grepこのフラグをサポートするaを使用してください-P

grep -oP '(?<=a)a' file | wc -l

これは肯定的です後ろを見て。これはaもう一方の前にあるシングルと一致しますa


必要な場合perl(またはフラグgrepをサポートしていない場合-P):

perl -ne 'while(m/(?<=a)a/g){$a++}END{print "$a\n"}' file

例:

$ cat file
aa
aaa
aaaa

最初の行は1つの一致でなければならず、2番目の行は2つの項目でなければならず、3行目は合計6つの項目でなければなりません。

$ grep -oP '(?<=a)a' file | wc -l
6

おすすめ記事