如何从 gzip 文件中获取前几行?我试过zcat,但它抛出一个错误
zcat CONN.20111109.0057.gz|head
CONN.20111109.0057.gz.Z: A file or directory in the path name does not exist.
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.
在某些系统(例如 Mac)上,您需要使用gzcat
.
在 Mac 上,您需要使用<
with zcat:
zcat < CONN.20111109.0057.gz|head
如果需要连续范围的行,一个选项可能是:
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 行,依此类推。
如果你想使用zcat
,这将显示前 10 行
zcat your_filename.gz | head
假设您想要 16 第一行
zcat your_filename.gz | head -n 16
这个 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
}