Bash 如何将.tab.gz文件合并成一个gz文件而不重复colunm头?

Bash 如何将.tab.gz文件合并成一个gz文件而不重复colunm头?,bash,shell,command-line,Bash,Shell,Command Line,我目前正在使用这个简单的cat组合gzip选项卡分隔的文件。但是,由于两者都有相同的列标题,因此我最终在文件的开头有一个标题,在中间有另一个标题,在那里它被连接起来。如何在不解压缩文件的情况下只为c.gz文件保留一个头 文件示例: a、 标签 b、 标签 所需c.标签 col1 col2 col3 1 2 3 1 4 6 我正在尝试的:cata.tab.gz b.tab.gz>c.tab.gz 我在c.tab中得到的内容: col1

我目前正在使用这个简单的
cat
组合gzip选项卡分隔的文件。但是,由于两者都有相同的列标题,因此我最终在文件的开头有一个标题,在中间有另一个标题,在那里它被连接起来。如何在不解压缩文件的情况下只为
c.gz
文件保留一个头

文件示例:

a、 标签

b、 标签

所需c.标签

col1      col2      col3
1      2      3
1      4      6
我正在尝试的:
cata.tab.gz b.tab.gz>c.tab.gz

我在
c.tab中得到的内容

col1      col2      col3
1      2      3
col1      col2      col3
1      4      6
使用awk:

$ awk 'FNR>1||NR==1' <(gunzip -c a.tab.gz) <(gunzip -c b.tab.gz) | gzip > c.tab.gz
编辑:另一个awk:

$ zcat [ab].tab.gz | awk 'NR==1{h=$0;print}$0!=h' | gzip > c.tab.gz
它排除与未压缩的第一个文件的第一条记录相同的记录-如果数据中有标题,则可能会导致问题。

(zcat a.tab.gz;awk'NR>1{print}'c.tab.gz
(zcat a.tab.gz;awk 'NR>1 { print }' <(zcat b.tab.gz)) | gzip > c.tab.gz
将a.tab.gz的内容与zcat进行匹配,然后将zcat b.tab.gz的输出重定向回awk,打印除第一行以外的所有内容。将组合输出传输到gzip和文件c.tab.gz

与sed处理头相同的解决方案:

(zcat a.tab.gz;sed -n '2,$p' <(zcat b.tab.gz)) | gzip > c.tab.gz
(zcat a.tab.gz;sed-n'2,$p'c.tab.gz

谢谢你的回复!很有效!我真的是命令行中的一个noob,那么我如何才能
cat
将结果添加到一个名为
c.tab.gz
的新选项卡压缩文件中呢?更新了解决方案。很抱歉,第一次就错过了。对文件进行zcat不是更好吗?你已经解压缩了文件,而这不是问题所在最初请求?@RamanSailopal您已解压缩文件,这是什么意思?出于某种原因,
(zcat a.tab.gz;awk'NR>1{print}'c.tab.gz
不起作用。
zcat:无法统计:没有这样的文件或目录
。我确信文件在那里,而且写得正确。james的解决方案有效,但我的大文件需要一些时间。第二个解决方案也有同样的错误。
$ zcat [ab].tab.gz | awk 'NR==1{h=$0;print}$0!=h' | gzip > c.tab.gz
(zcat a.tab.gz;awk 'NR>1 { print }' <(zcat b.tab.gz)) | gzip > c.tab.gz
(zcat a.tab.gz;sed -n '2,$p' <(zcat b.tab.gz)) | gzip > c.tab.gz