How to get few lines from a .gz compressed file without uncompressing
Asked Answered
R

6

107

How to get the first few lines from a gziped file ? I tried zcat, but its throwing an error

zcat CONN.20111109.0057.gz|head
CONN.20111109.0057.gz.Z: A file or directory in the path name does not exist.
Rummy answered 16/11, 2011 at 12:6 Comment(0)
S
183

zcat(1) can be supplied by either compress(1) or by gzip(1). On your system, it appears to be compress(1) -- it is looking for a file with a .Z extension.

Switch to gzip -cd in place of zcat and your command should work fine:

 gzip -cd CONN.20111109.0057.gz | head

Explanation

   -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.
Sieber answered 16/11, 2011 at 12:10 Comment(4)
BTW, if you are sitting with a *.tar.gz, this will help you out: tar -xzOf some_huge_file.tar.gz | headNoah
Old thread but this produces a broken pipe with exit status 1 with big gz files. Any clean workaround?Curious
Best and easiest workaround I've found so far: use zless file.gz | head. zmore still leaves you with broken pipe. zless seems to be the way to go.Curious
zless doesn't exit... at least not on my large file. I'm still looking for a way do do this without broken pipe errors...Gregale
E
18

On a mac you need to use the < with zcat:

zcat < CONN.20111109.0057.gz|head

Empson answered 17/8, 2016 at 23:18 Comment(0)
A
17

On some systems (e.g., Mac), you need to use gzcat.

Alvinalvina answered 16/11, 2011 at 12:19 Comment(1)
More specifically gzcat {file} | headFishworm
P
4

If a continuous range of lines needs be, one option might be:

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

where the lines between 5th and 10th lines (both inclusive) of file.gz are extracted into a new subFile. For sed options, refer to the manual.

If every, say, 5th line is required:

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

which extracts the 1st line and jumps over 4 lines and picks the 5th line and so on.

Phonetician answered 6/7, 2018 at 10:19 Comment(0)
H
4

If you want to use zcat, this will show the first 10 rows

zcat your_filename.gz | head

Let's say you want the 16 first row

zcat your_filename.gz | head -n 16
Holeproof answered 28/9, 2021 at 15:54 Comment(0)
B
1

This awk snippet will let you show not only the first few lines - but a range you can specify. It will also add line numbers which i needed for debugging an error message pointing to a certain line way down in a gzipped file.

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

Here is the awk snippet used in the one liner above. In awk NR is a built-in variable (Number of records found so far) which usually is equivalent to a line number. the from and to variable are picked up from the command line via the -v options.

NR>=from {
   print NR,$0; 
   if (NR>=to) 
     exit 1
}
Bier answered 30/9, 2020 at 4:49 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.