여러 디렉터리에 있는 여러 압축 파일의 문자열 수 찾기(집계되지 않음)

여러 디렉터리에 있는 여러 압축 파일의 문자열 수 찾기(집계되지 않음)

"event" 및 "type" 문자열이 포함된 행 수를 찾으려고 합니다. 제가 찾고 있는 파일은 여러 폴더에 있고 압축되어 있습니다. 내가 원하는 것의 총 개수를 얻을 수 있지만 내 목표는 파일별 개수를 표시하는 것입니다. 이것이 내가 현재 사용하고 있는 것입니다:

zcat /folder1/{folderA,folderB,folderC}/folder2/folder3/result-2018-05-1* | zcat /folder1/{folderA,folderB,folderC}/folder2/folder3/result-2018-05-1* | grep '이벤트' | grep '유형' |

내 결과는 다음과 같습니다

86446

하지만 내 출력은 다음과 같습니다.

result-2018-05-10.log.gz: 1000
result-2018-05-11.log.gz: 3000
result-2018-05-12.log.gz: 20000
result-2018-05-13.log.gz: 4446
result-2018-05-14.log.gz: 12000
result-2018-05-15.log.gz: 10000
result-2018-05-16.log.gz: 15000
result-2018-05-17.log.gz: 5000
result-2018-05-18.log.gz: 6000
result-2018-05-19.log.gz: 10000

어떤 제안이 있으십니까?

답변1

두 가지 테스트만 수행하면 충분합니다.

zgrep -E -c 'event.*type|type.*event' /folder1/{folderA,folderB,folderC}/folder2/folder3/result-2018-05-1*

줄에 typeand 가 포함되어 있는지 테스트하는 것은 뒤에 or 가 포함되어 있는지 테스트하는 것과 같습니다 event. 세 번째 테스트가 필요한 경우에는 확장이 잘 되지 않습니다.typeeventeventtype

그런 다음 이와 같은 것을 추가하면 | sed 's#^.*/##'문제의 정확한 결과를 얻을 수 있습니다.


고쳐 쓰다:

좀 더 일반적인 경우에는 루프가 더 좋아 보입니다.

for i in /folder1/{folderA,folderB,folderC}/folder2/folder3/result-2018-05-1*; do
    printf '%s: ' "$(basename "$i")"
    zcat < "$i" | grep 'filter1' | grep 'filter 2' | grep 'filter3' | wc -l
done

관련 정보