고유한 이름의 빈도 찾기

고유한 이름의 빈도 찾기

사용자 이름이 포함된 압축된 CSV 파일 (.csv.gz)의 하위 폴더가 있고 사용자 이름의 빈도를 찾으려고 합니다.

다음 bash 파이프라인은 상위 사용자를 제공합니다.

for subfolder in folder; do gunzip -rc $subfolder | cut -d, -f1 | sort | uniq -c | sort -nr | head; done

하지만 하위 폴더에 대용량 파일이 많으면 속도가 매우 느려집니다. 이 목적에 더 효율적인 bash 스크립트가 있습니까?

답변1

고유 사용자 수에 따라 awk무거운 작업을 수행한 다음(중복 항목을 읽을 때 정렬하지 않고 계산) 결과를 정렬할 수 있습니다. 더 빨라야 합니다(그러나 여전히 모든 것을 압축 해제해야 하므로 시간이 좀 걸립니다).

$ for subfolder in folder; do gunzip -rc $subfolder | awk -F, '{l[$1]++} END {for (i in l) {print l[i],i}}' | sort -rn | head;done

참고로 다음보다 빠르게 실행할 수는 없습니다.

$ for subfolder in folder; do gunzip -rc $subfolder > /dev/null;done

관련 정보