"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*
줄에 type
and 가 포함되어 있는지 테스트하는 것은 뒤에 or 가 포함되어 있는지 테스트하는 것과 같습니다 event
. 세 번째 테스트가 필요한 경우에는 확장이 잘 되지 않습니다.type
event
event
type
그런 다음 이와 같은 것을 추가하면 | 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