aa
非常に大きなファイルで繰り返されるパターンの数を数えたいです。だから、次のコマンドを使用します。
grep -o "aa" ./bwt/dblp.txt | wc -l
たとえば、文字列がない場合は機能し、aaa
1つのパターンにのみ一致します。私のユースケースでは、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