압축 파일의 행 수


답변:


60

파일이 여전히 압축되어 있으면 개행을 계산할 수 없습니다.

그러나 (압축 해제 된) 파일을 디스크에 쓰지 않고도 스트림으로 압축을 풀고 해당 스트림의 줄 바꿈을 계산할 수 있습니다. 그것은 다음과 같이 갈 것입니다 :

zcat file.gz | wc -l

압축 해제 및 고양이를위한 zcat, 단어 개수를위한 화장실. 더 알고 싶다면 맨 페이지를 참조하십시오.

편집하다

zcat이없는 경우 zcat은에 대한 또 다른 이름 일뿐입니다 gunzip -c.


7
유닉스에서 gzip구별됩니다 compress, 당신이 원하는 gzcat.
coneslayer

7

이것은 또한 작동하는 것 같습니다-파일의 줄 끝 수에 grep

zgrep -Ec "$" file.gz

이것은 배관에 대한 것보다 나에게 다른 (훨씬 높은) 대답을 제공합니다wc -l
Stop

5

빨리하고 싶다면 'pigz'(IIRC는 "GZip의 병렬 구현"을 나타냄)를 사용하는 것이 좋습니다. 방금 gzip으로 압축 된 파일의 줄 수를 세고 싶었던 비슷한 상황이 있었고 여기에 내 해결책이 있습니다.

for x in *.gz; do unpigz -p 8 -c $x | wc -l && echo $x; done

8 개의 프로세서를 사용하여 줄 수와 줄 수에서 계산 한 파일 수를 알려줍니다. 빨리 달렸다!


1
또는 unpigz를 사용할 수없는 경우 다음과 같이하십시오.for x in *.fastq.gz; do zcat "$x" | wc -l && echo $x; done
Calimo

2

이 명령을 사용하십시오 :

gzgrep -c $ filename.gz

이 명령 gzgrepgrepgzip 압축 파일 과 동일 하지만 gzip 압축 파일에서 작동 합니다. 정규식 일치를 위해 파일을 즉시 압축 해제합니다.

이 경우 -c, 일치하는 줄 수를 출력하도록 명령에 지시하고 정규 표현식 $은 줄 끝과 일치하므로 모든 줄이나 파일과 일치합니다.

최종 결과는 gzip -dc filename.gz | grep -c $입니다.


gzgrep솔라리스가 아닌 다른 시스템에서 사용 가능?
pabouk

1
아니요. 다른 시스템에서 명령은 zgrep -c $ filename.gz입니다.
Ravi KM

1
직관적으로 이것이 zcat + wc보다 낫다고 생각할 수도 있지만, 시간을 정할 때도 같은 시간이 걸립니다.
ngọcminh.oss

1

정확한 개수가 아닌 대략적인 추정치에 만족하고 실제로 전체 파일을 추출하거나 줄 끝을 위해 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)데이터가 라인마다 상당히 동질적인 한 대략적인 라인 수는 입니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.