如何从gziped文件中获取前几行? 我试过zcat,但它抛出错误
zcat CONN.20111109.0057.gz|head
CONN.20111109.0057.gz.Z: A file or directory in the path name does not exist.
答案 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
}