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

后端 未结 5 1142
野的像风
野的像风 2020-12-22 22:28

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 o         


        
相关标签:
5条回答
  • 2020-12-22 22:51

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

    0 讨论(0)
  • 2020-12-22 22:53

    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.
    
    0 讨论(0)
  • 2020-12-22 22:53

    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
    }
    
    0 讨论(0)
  • 2020-12-22 22:57

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

    zcat < CONN.20111109.0057.gz|head

    0 讨论(0)
  • 2020-12-22 23:08

    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.

    0 讨论(0)
提交回复
热议问题