6

I have a zipped text file a.zip I want to read the first 10 lines of it. Is it possible to do that without unzipping the whole file?

yukashima huksay
  • 917
  • 5
  • 14
  • 29

1 Answers1

11

This simple pipe-script works for me:

zcat a.zip | head -n 10

Here:

  • zcat a.zip - unpacks zip-archive and sends its contents to standard output
  • | pipes zcat output to head input
  • head -n 10 - shows first 10 lines from its standard input
N0rbert
  • 97,162
  • 34
  • 239
  • 423
  • this unzips the whole file. – yukashima huksay Jan 04 '18 at 11:41
  • 5
    @yukashima I'd guess it depends on the size of `a.zip`. When `head` terminates (after printing 10 lines) the `zcat` (which is `gzip -dc` behind the scenes) should receive a SIGPIPE and stop unzipping. – PerlDuck Jan 04 '18 at 11:53
  • @yukashimahuksay How do you know it unzips the whole file? I think all zip files keep the file list at the end of the archive, maybe it's just reading the whole file but not actually unzipping it – Xen2050 Jan 04 '18 at 12:38
  • I can confirm by example that it does not unzip the whole file as intended. `zcat verybigfile.zip | head -10` prints the first 10 lines _immediately_. A full unzip would take ca. 10 minutes. – cubic lettuce Aug 21 '20 at 14:55