各行のパターン発生回数を計算し、最後に一致する行番号を取得したいと思います。
だから私が使用するパターンを計算するために
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つずつあると仮定)。