You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Bash函数合并两个GZIP CSV文件并移除第二个文件首行?

合并GZIP压缩CSV文件并移除第二个文件首行(无需解压)

没问题,这事儿好办!你已经掌握了非压缩文件的合并逻辑,针对GZIP压缩的文件,我们只需要借助zcat(或等效命令)直接读取压缩内容就行,完全不用提前解压,既省空间又高效。

实现函数

直接用进程替换结合zcat和tail就能搞定,函数如下:

function merge_gz_files {
    zcat "$1" <(zcat "$2" | tail +2) > "$3"
}

代码解释

  • zcat:专门用于读取GZIP压缩文件的内容,效果等同于gzip -dc,能直接把压缩内容输出到标准输出,不用提前解压到磁盘。
  • <(...):这是Bash的进程替换特性,会把括号里的命令输出当作一个临时的“文件”来处理。这里我们先读取第二个压缩文件的内容,再用tail +2去掉首行,最后和第一个文件的完整内容合并输出到目标文件$3。

兼容性补充

如果你的系统上zcat不可用(比如部分BSD系统),可以用gzip -dc或者gzcat替代,效果完全一样:

function merge_gz_files {
    gzip -dc "$1" <(gzip -dc "$2" | tail +2) > "$3"
}

使用示例

假设你的两个压缩文件是data1.gz和data2.gz,想要合并后输出到merged.csv,直接运行:

merge_gz_files data1.gz data2.gz merged.csv

最终merged.csv的内容就是你想要的:

a,1
b,2
c,3
b,2
c,3

内容的提问来源于stack exchange,提问作者Jase

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 20:08:08