grep: 주석 발생 횟수

grep: 주석 발생 횟수

다음과 유사한 형식의 텍스트 파일이 있습니다.

PktType1 Header
PktType1 Pay
PktType1 Done
PktType0 Header
PktType0 Pay
PktType0 Done
...

내가 원하는 것은 모든 항목에 대해 grep을 수행 PktType0 Done한 다음 줄 번호와 함께 N번째 항목을 주석 처리하는 것입니다. 예를 들어:

1 42 PktType0 Done
2 65 PktType0 Done
3 75 PktType0 Done

여기서 42, 65, 75는 줄 번호이고 1, 2, 3은 발생 횟수입니다. 나는 그것을 파일에 쓴 다음 줄 번호를 표시할 수 있다고 생각했습니다. 하지만 동일한 작업을 수행할 수 있는 도구가 있는지 궁금합니다.

답변1

패턴 일치뿐만 아니라 줄 번호 및 일치 횟수를 포함한 추가 형식 지정을 원하는 경우 Awk가 grep보다 더 나은 선택입니다.

awk '/PktType0 Done/{ print ++count, NR, $0 }' file

답변2

동일한 작업을 수행할 수 있는 도구가 있는지 궁금합니다.

예:nl

<log.txt grep -n 'PktType0 Done' | nl

답변3

다른 답변의 예제 데이터 사용:

$ cat file
PktType0 Done
PktType1 Header
PktType1 Pay
PktType0 Done
PktType1 Done
PktType0 Header
PktType0 Pay
PktType0 Done
$ awk '$0 == "PktType0 Done" { print ++count, NR, $0 }' file
1 1 PktType0 Done
2 4 PktType0 Done
3 8 PktType0 Done

awk명령은 문자열과 정확히 동일한 줄을 제외한 모든 줄을 무시합니다 PktType0 Done. 카운터 값, 현재 줄 번호 및 줄 자체를 인쇄합니다.

모든 줄의 어느 위치에서나 문자열을 하위 문자열로 찾 $0 == "PktType0 Done"도록 변경되었습니다 ./PktType0 Done/

답변4

grep -n conf file |
  sed -Ee 's/^([[:digit:]]*):/\1 /' |
  cat -n

이 단계는 원하는 출력에 표시되지 않는 줄 번호와 텍스트 사이에 콜론을 넣었 sed기 때문입니다 .grep -n

관련 정보