grep 일치 후 파일의 줄 수를 계산하는 방법은 무엇입니까?

grep 일치 후 파일의 줄 수를 계산하는 방법은 무엇입니까?

CSV 파일에서 문제가 있는 행 뒤의 행 수를 계산하려고 합니다. grep -a #일치하는 항목을 찾은 후 # 줄 수를 출력하는 구문을 사용할 수 있다는 것을 알고 있습니다 . 실제 행 수에만 관심이 있습니다. 숫자를 MAX_INT로 설정하고 이를 파일로 파이프한 후 추가 처리를 수행할 수 있다는 것을 깨달았습니다.

나는 카운트를 알려주는 간결한 한 줄의 글을 찾고 있습니다.

어떤 제안이 있으십니까?

답변1

{ grep -m1 match; grep -c ''; } <file

grep이는 GNU 및 가능한 infile 에서 작동합니다 lseek(). 첫 번째 항목은 grep1개 패치에서 중지되고 -m두 번째 항목은 -c입력의 나머지 모든 라인을 계산합니다.

GNU 없이 grep:

{ sed '/match/q'; grep -c ''; } <file

물론, grep그 이상의 다른 옵션을 모두 사용할 수 있으며, 경기 도중에 멈출 필요가 전혀 없습니다.

답변2

이것은 한 가지 방법입니다.

$ cat foo
aaa
bbb
ccc
ddd
eee
fff
$ awk '/^ddd/{a=FNR}END{print FNR-a}' foo
2
$

답변3

또 다른 접근 방식 - dc사용하기에는 약간 난해하지만 여기서는 잘 작동하는 것 같습니다.

sed -n '/problem/=;$=' prob.txt | dc -e '??r-p'

sedprob.txt"문제"와 마지막 줄을 검색 하고 =명령을 사용하여 두 줄 모두의 줄 번호를 출력합니다.

dc두 값을 스택에 읽어 들여 거꾸로 뒤집은 다음 차이를 빼고 인쇄합니다.

답변4

문제가 있는 행까지(및 포함) 모든 행을 삭제한 다음 나머지 행 수를 계산해야 합니다.

sed '1,/problem/d' data.txt | wc -l

관련 정보