如何在不解压缩的情况下从.gz压缩文件中获取几行


89

如何从gziped文件中获取前几行?我尝试了zcat,但是它抛出错误

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

Answers:


149

zcat(1)可以由compress(1)或由提供gzip(1)。在您的系统上,它似乎是compress(1)-正在寻找带有.Z扩展名的文件。

切换到gzip -cdzcat您的命令应该可以正常运行:

 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
顺便说一句,如果您坐在* .tar.gz上,这将对您有所帮助: tar -xzOf some_huge_file.tar.gz | head
demaniak 2013年

旧线程,但这会导致出口状态为1的管道破损,并带有较大的gz文件。任何干净的解决方法?
kaligne

2
到目前为止,我发现的最佳和最简单的解决方法是:use zless file.gz | headzmore仍然让您管破了。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被提取到new subFile。有关sed选项,请参阅手册

如果需要,例如,第5行

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

提取第一行并跳过4行,然后选择第五行,依此类推。


在MacOSX上不起作用
Wolfgang Fahl

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是一个内置变量(到目前为止找到的记录数),通常等同于行号。通过-v选项从命令行获取from和to变量。

NR>=from {
   print NR,$0; 
   if (NR>=to) 
     exit 1
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.