grep이 일치 한 후 파일의 줄 수를 어떻게 계산합니까? 세려고합니다. grep -a

CSV 파일에서 문제가있는 행 뒤에 줄 수를 세려고합니다. grep -a #일치하는 것을 찾은 후 구문을 사용하여 # 줄 수를 출력 할 수 있다는 것을 알고 있습니다 . 실제 줄 수에만 관심이 있습니다. 숫자를 MAX_INT로 설정하고 파일로 파이프하고 더 많은 처리를 수행 할 수 있음을 알고 있습니다.

나는 카운트를 말해 줄 간결한 한 줄짜리 라이너를 찾고 있습니다.

어떤 제안?



답변

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

그것은 GNU greplseek()유능한 파일로 작동 합니다. 첫 번째 grep-m1atch 에서 멈추고 두 번째는 -c입력에 남아있는 모든 줄 을 잊어 버립니다.

GNU없이 grep:

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

물론, grep다른 옵션을 사용하거나 다른 옵션을 모두 사용할 수 있으며 한 경기에서 멈출 필요는 없습니다.


답변

한 가지 방법이 있습니다.

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

답변

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

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

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

dc 이 두 값을 스택으로 읽어서 뒤집고, 하위 값을 빼고 차이를 인쇄합니다.


답변

sed를 완전히 사용 (파이프가있는 두 명령이지만)

sed '/ddd/,$!d' file | sed -n '$='

행 앞의 모든 행을 삭제 한 후 다음 명령은 새 파일에서 행을 계산합니다.


답변

문제가있는 행까지 (그리고 포함하여) 모든 행을 삭제 한 다음 나머지 행을 계산해야합니다.

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