101

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

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

6 回答 6

168

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

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

 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.
于 2011-11-16T12:10:30.400 回答
15

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

于 2011-11-16T12:19:26.090 回答
14

在 Mac 上,您需要使用<with zcat:

zcat < CONN.20111109.0057.gz|head

于 2016-08-17T23:18:55.603 回答
3

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

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

其中第 5 行和第 10 行(包括两者)之间的行file.gz被提取到新的subFile. 有关sed选项,请参阅手册

如果每个,比如说,第 5 行是必需的:

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

它提取第 1 行并跳过 4 行并选择第 5 行,依此类推。

于 2018-07-06T10:19:05.633 回答
1

如果你想使用zcat,这将显示前 10 行

zcat your_filename.gz | head

假设您想要 16 第一行

zcat your_filename.gz | head -n 16
于 2021-09-28T15:54:46.477 回答
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 是一个内置变量(迄今为止发现的记录数),通常相当于行号。from 和 to 变量是通过 -v 选项从命令行获取的。

NR>=from {
   print NR,$0; 
   if (NR>=to) 
     exit 1
}
于 2020-09-30T04:49:46.373 回答