각 줄의 패턴 발생 횟수를 계산하고 마지막으로 일치하는 줄 번호를 얻고 싶습니다.
그래서 내가 사용할 패턴을 계산하기 위해
grep -c pattern file
그리고 마지막으로 일치하는 줄 번호
grep -n pattern file | cut -d : -f 1 | tail -1
한 번만 grep하여 두 결과를 모두 얻을 수 있는 방법이 있습니까? 제가 작업 중인 파일은 크고 여러 패턴에 대해 이 파일을 반복해야 하므로 두 번 greping을 피하고 싶습니다.
답변1
awk
대신 사용할 수 있습니다 grep
.
awk '/pattern/ {last = NR; count++}
END {printf "Last: %s\nCount: %d\n", last, count}' < file
참고로 awk
패턴은확장하다정규식( grep -E
백슬래시와 약간 다름)
awk
모든 모드에 대해 한 번의 호출만 사용할 수도 있습니다 .
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
패턴 목록이 한 줄에 하나씩 있다고 가정).