【发布时间】:2020-06-12 08:33:55
【问题描述】:
我有两个gzip CSV 文件,每个文件都有这些解压后的内容:
a,1
b,2
c,3
如何使用 bash 函数以从第二个文件中删除第一行的方式合并它们,以便获得此输出?最好我可以在不解压缩任何一个输入文件的情况下做到这一点。
a,1
b,2
c,3
b,2
c,3
我已经知道如何处理非 gzip 文件:
function merge_files {
cat "$1" <(tail +2 "$2") > "$3";
}
【问题讨论】:
-
你不能;标题是赋予文件其余部分含义的原因。或者,换句话说,每个文件的压缩模式是不同的,并且在标头中进行了编码。在一个(弱)类比中,这就像试图将一个法语文件和一个中文文件粘贴在一起,并期待一个清晰的斯瓦希里语出来。解压和重新压缩不是可选的:
gzcat file1.gz file2.gz | gzip > file.out -
我一定是误用了“header”这个词。我指的是解压后数据的第一行(在本例中为
a,1)。 -
啊哈哈,我的错。你没有滥用它,它只是模棱两可。 :) 但重点仍然存在,减压不是可选的。