grep을 사용하고 awk를 사용하여 고유한 항목을 찾으면 해당 값이 파일에 나타나는 횟수와 파일 이름도 얻을 수 있습니까?
나는 이것을 시도했습니다 :
zgrep '2020-04-20|12345|' FILENAME_* |awk -F '|' '{print $2 "|" $3 "|" $4}' | sort | uniq -c
파일의 2,3,4열에 고유한 항목이 표시되지만 해당 항목이 있는 파일의 이름을 알고 싶습니다. 어떻게 해야 하나요?
답변1
~을 위한압축되지 않은그리고압축파일을 확인하고 다음을 시도해 보세요.
for f in FILENAME_*; do
zcat -f "$f" | awk '/2020-04-20\|12345\|/ {rec=$2 "|" $3 "|" $4; a[rec]+=1}
END {for (rec in a) print FILENAME " : " rec " : " a[rec]}'
done > output.txt
간략한 설명:
- 먼저 와일드카드(
*
)를 사용하여 가능한 모든 파일 이름을 반복합니다. - 입력 파일의 압축을 풀 려면
zcat -f <filename>
(참조1,2...) 필요한 경우 즉시 수행할 수 있습니다(-f
옵션). zcat -f <filename> | awk ...
파일의 압축이 풀린 출력을$f
입력으로 사용합니다awk
.- 찾은 각 패턴에 대해 구문 분석된 레코드의 값이 발견될 때마다
2020-04-20|12345|
상관 계수 배열이 증가합니다 .a
$2 | $3 | $4
awk
END
파일( 청크) 및rec
연관 배열의 각 구성 요소 에 대한 구문 분석을 마치면a
연결은 파일 이름 "FILENAME",rec
값$2 | $3 | $4
및 해당 값이 발생한 횟수를 인쇄합니다a[rec]
.awk
현재 처리된 파일 'FILENAME'의 이름과 같은 몇 가지 편리한 내부 변수를 사용할 수 있도록 합니다.for
루프의 연속 출력에 대한 단일 리디렉션은output.txt
완전히 선택 사항입니다. 억제하면stdout
.
=====================================
정답은편집하다@AdminBee, @roaima, @dave_thompson 및 @kusalananda의 유용한 의견을 바탕으로 개선되었습니다.