사용자 이름이 포함된 압축된 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