압축 파일의 행 수 있으면 특정 줄 수가 있습니다. 압축을 풀지

유닉스에 .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

이 명령 gzgrepgrepgzip 압축 파일 과 동일 하지만 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

이것은 나를 위해 일했습니다.