유닉스에 .gz 파일이 있으면 특정 줄 수가 있습니다. 압축을 풀지 않고 유닉스에서 줄을 어떻게 셀 수 있습니까?
답변
파일이 여전히 압축되어 있으면 개행을 계산할 수 없습니다.
그러나 (압축 해제 된) 파일을 디스크에 쓰지 않고도 스트림으로 압축을 풀고 해당 스트림의 줄 바꿈을 계산할 수 있습니다. 그것은 다음과 같이 갈 것입니다 :
zcat file.gz | wc -l
압축 해제 및 고양이를위한 zcat, 단어 개수를위한 화장실. 더 알고 싶다면 맨 페이지를 참조하십시오.
편집하다
zcat이없는 경우 zcat은에 대한 또 다른 이름 일뿐입니다 gunzip -c
.
답변
이것은 또한 작동하는 것 같습니다-파일의 줄 끝 수에 grep
zgrep -Ec "$" file.gz
답변
빨리하고 싶다면 ‘pigz'(IIRC는 “GZip의 병렬 구현”을 나타냄)를 사용하는 것이 좋습니다. 방금 gzip으로 압축 된 파일의 줄 수를 세고 싶었던 비슷한 상황이 있었고 여기에 내 해결책이 있습니다.
for x in *.gz; do unpigz -p 8 -c $x | wc -l && echo $x; done
8 개의 프로세서를 사용하여 줄 수와 줄 수에서 계산 한 파일 수를 알려줍니다. 빨리 달렸다!
답변
이 명령을 사용하십시오 :
gzgrep -c $ filename.gz
이 명령 gzgrep
은 grep
gzip 압축 파일 과 동일 하지만 gzip 압축 파일에서 작동 합니다. 정규식 일치를 위해 파일을 즉시 압축 해제합니다.
이 경우 -c
, 일치하는 줄 수를 출력하도록 명령에 지시하고 정규 표현식 $
은 줄 끝과 일치하므로 모든 줄이나 파일과 일치합니다.
최종 결과는 gzip -dc filename.gz | grep -c $
입니다.
답변
정확한 개수가 아닌 대략적인 추정치에 만족하고 실제로 전체 파일을 추출하거나 줄 끝을 위해 zgrepping하는 데 너무 오래 걸릴 수 있습니다 (지금의 상황).
zcat "$file" | head -1000 > 1000-line-sample.txt
ls -ls 1000-line-sample.txt "$file"
1000 * (size of $file) / (size of 1000-line-sample)
데이터가 라인마다 상당히 동질적인 한 대략적인 라인 수는 입니다.
답변
gzip -cd <file.gz> | wc -l
이것은 나를 위해 일했습니다.