如何从.gz压缩文件中获取几行而不解压缩

时间:2011-11-16 12:06:03

标签: gzip gunzip zcat

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

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

5 个答案:

答案 0 :(得分:126)

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

切换到gzip -cd代替zcat,您的命令应该可以正常运行:

 gzip -cd CONN.20111109.0057.gz | head

答案 1 :(得分:11)

在某些系统(例如Mac)上,您需要使用gzcat

答案 2 :(得分:9)

在Mac上,您需要将<与zcat:

一起使用

zcat < CONN.20111109.0057.gz|head

答案 3 :(得分:2)

如果需要连续范围的行,则一个选项可能是:

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

其中file.gz的第5行和第10行之间的行被提取到新的subFile中。有关sed选项,请参考the manual

如果每行,例如第5行是必需的:

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

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

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

NR>=from {
   print NR,$0; 
   if (NR>=to) 
     exit 1
}