개수를 생성하려면 중첩된 zgrep을 구성하는 데 도움이 필요합니다.

개수를 생성하려면 중첩된 zgrep을 구성하는 데 도움이 필요합니다.

저는 직장에서 일부 보고 작업을 지원해 왔으며 우리가 생성한 다소 큰 로그 파일에서 다양한 요소의 고유한 개수를 얻으려고 노력하고 있습니다. 지금까지 두 개의 별도 명령을 실행하여 개수를 계산할 수 있었지만 몇 가지 제한 사항으로 인해 두 명령을 결합해야 했습니다. 제가 실행한 내용은 다음과 같습니다(무고한 사람을 보호하기 위해 파일 이름, 디렉터리, 검색어 이름이 변경되었습니다).

명령 1- _transformer_이러한 고유한 로그 항목을 모두 필터링하고 새 파일에 기록합니다(제가 계산하고 있는 각 프로젝트에는 트랜잭션당 여러 항목이 있으므로 다음 단계의 속도를 높이고 중복 항목을 제거하기 위해 이 작업을 수행합니다).

zgrep -a _transformer_ /files/are/located/here/logfile_date.gz > \
     /temp/directory/count_file_date.gz

명령 2- 거래와 관련된 각 항목의 인스턴스 수를 계산합니다.

zgrep -caE 'shockwave|starscream|megatron|prowl|blaster' \
     /temp/directory/count_file_date.gz

이것은 완벽하게 작동하지만 이를 하나의 명령으로 결합하고 새 파일 작성을 건너뛰고 싶습니다. 내가 생각했던 방법은 다음과 같습니다. 그러나 그렇지 않습니다.

단일 명령

zgrep -a _transformer_ | \
zgrep -acE 'shockwave|starscream|megatron|prowl|blaster' \
      /files/are/located/here/logfile_date.gz

위 명령을 실행하면 다음을 포함하는 개수뿐만 아니라 파이프 사이에 단어가 포함된 모든 로그 항목의 개수가 출력됩니다.변신 로봇로그의 특정 줄에 있습니다.

답변1

zgrep -a _transformer_ /files/are/located/here/logfile_date.gz |
  grep -acE 'shockwave|starscream|megatron|prowl|blaster'

첫 번째 zgrep호출은 gzip -dcf파일을 생성한 다음 grep -a _transformer_결과 스트림을 내부적으로 실행하여 다른 grep호출에 전달하는 압축되지 않은 스트림을 생성합니다. 세 가지(gzip, grep, grep) 모두 디스크에 중간 데이터를 저장하지 않고 동시에 실행됩니다.

다음 3가지 명령을 수동으로 실행할 수도 있습니다.

gzip -dcf /files/are/located/here/logfile_date.gz |
  grep -a _transformer_ |
  grep -acE 'shockwave|starscream|megatron|prowl|blaster'

( ( 및 와 함께 사용되는 -f경우 )는 파일이 압축 해제된 것처럼 동작하고 압축을 해제하여 압축 해제를 생성하는 대신 stdout에 결과를 출력합니다 .)-c-dgzipcat-d-c/files/are/located/here/logfile_date

grep지원되는 경우 이 작업을 함께 수행할 수 있습니다 -P.

gzip -dcf /files/are/located/here/logfile_date.gz |
  grep -acP '^(?=.*_transformer_).*(shockwave|starscream|megatron|prowl|blaster)'

또는 휴대용으로 사용하십시오 awk.

gzip -dcf /files/are/located/here/logfile_date.gz |
  awk -v n=0 '
    /_transformer/ && /shockwave|starscream|megatron|prowl|blaster/ {n++}
    END {print n}'

관련 정보