압축을 풀지 않고 .gz 압축 파일에서 몇 줄을 가져 오는 방법


90

gzip 파일에서 처음 몇 줄을 얻는 방법은 무엇입니까? 나는 zcat을 시도했지만 오류가 발생했습니다.

zcat CONN.20111109.0057.gz|head
CONN.20111109.0057.gz.Z: A file or directory in the path name does not exist.

답변:


150

zcat(1)compress(1)또는에서 제공 할 수 있습니다 gzip(1). 시스템에서 확장명이 compress(1)있는 파일을 찾고 있는 것처럼 보입니다 .Z.

gzip -cd대신으로 전환하면 zcat명령이 제대로 작동합니다.

 gzip -cd CONN.20111109.0057.gz | head

설명

   -c --stdout --to-stdout
          Write output on standard output; keep original files unchanged.  If there are several input files, the output consists of a sequence of independently compressed members. To obtain better compression, concatenate all input files before compressing
          them.

   -d --decompress --uncompress
          Decompress.

7
BTW, * .tar.gz와 함께 앉아 있다면 다음과 같이 도움이 될 것입니다. tar -xzOf some_huge_file.tar.gz | head
demaniak

오래된 스레드이지만 큰 gz 파일과 함께 종료 상태가 1 인 깨진 파이프가 생성됩니다. 깨끗한 해결 방법이 있습니까?
kaligne

2
지금까지 찾은 가장 쉽고 쉬운 해결 방법은 zless file.gz | head. zmore여전히 깨진 파이프를 남깁니다. zless갈 길인 것 같습니다.
kaligne

zless는 종료되지 않습니다 ... 적어도 큰 파일에는 없습니다. 나는 여전히 깨진 파이프 오류없이이 작업을 수행하는 방법을 찾고 있습니다 ...
Freek


11

Mac <에서는 zcat과 함께 사용해야합니다 .

zcat < CONN.20111109.0057.gz|head


2

경우 라인의 연속적인 범위가 될 필요가있다, 하나 개의 옵션 일 수 있습니다 :

gunzip -c file.gz | sed -n '5,10p;11q' > subFile

여기에서의 5 번째와 10 번째 줄 (둘 다 포함) 사이의 줄 file.gz이 새 subFile. 대한 sed옵션을 참조 설명서 .

경우 마다, 말, 5 라인이 필요합니다 :

gunzip -c file.gz | sed -n '1~5p;6q' > subFile

첫 번째 줄을 추출하고 4 줄을 넘고 다섯 번째 줄을 선택하는 식입니다.


0

이 awk 스 니펫을 사용하면 처음 몇 줄뿐 아니라 지정할 수있는 범위도 표시 할 수 있습니다. 또한 gzip 파일에서 특정 줄을 가리키는 오류 메시지를 디버깅하는 데 필요한 줄 번호를 추가합니다.

gunzip -c file.gz | awk -v from=10 -v to=20 'NR>=from { print NR,$0; if (NR>=to) exit 1}'

다음은 위의 한 라이너에 사용 된 awk 스 니펫입니다. awk에서 NR은 일반적으로 줄 번호와 동일한 내장 변수 (지금까지 찾은 레코드 수)입니다. from 및 to 변수는 -v 옵션을 통해 명령 줄에서 선택됩니다.

NR>=from {
   print NR,$0; 
   if (NR>=to) 
     exit 1
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.