パターンに一致する線を同時に計算

パターンに一致する線を同時に計算

各行のパターン発生回数を計算し、最後に一致する行番号を取得したいと思います。

だから私が使用するパターンを計算するために

grep -c pattern file

そして最後に一致する行番号

grep -n pattern file | cut -d : -f 1 | tail -1

一度だけgrepして両方の結果を得る方法はありますか?私が作業しているファイルは大きく、複数のパターンに対してこのファイルを繰り返す必要があるため、2回のgrepingを避けたいと思います。

ベストアンサー1

awk代わりに使用できますgrep

awk '/pattern/ {last = NR; count++}
     END {printf "Last: %s\nCount: %d\n", last, count}' < file

ちなみにawkパターンは拡大する正規表現(grep -Eバックスラッシュとは若干異なる)

awkすべてのモードに対して1回の呼び出ししか使用できません。

awk '!patterns_finished{patterns[$0]; next}
     {
       for (p in patterns) if ($0 ~ p) {
         last[p] = NR
         count[p]++
       }
     }
     END {
       for (p in patterns)
         printf "%s: count=%d last=%s\n", count[p], last[p]
     }' patterns.txt patterns_finished=1 file

patterns.txtパターンリストが1行に1つずつあると仮定)。

おすすめ記事