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

如何在命令行(bash、sed等)按列合并CSV文件的两行表头?

合并两行CSV表头的命令行实现方案

没问题!我来给你几种用bash、sed、awk这些命令行工具合并两行CSV表头的方案,根据你的CSV格式复杂度选就行~

方法1:用sed快速处理(简单CSV场景)

如果你的CSV表头两行没有包含逗号的字段(也就是没有用双引号包裹带逗号的内容),用sed是最直接的方式:

sed '1N;s/\n/,/' your_file.csv

命令解释:

  • 1N:读取第一行后,把第二行也加载到同一个处理空间里,让两行连在一起
  • s/\n/,/:把两行之间的换行符替换成逗号,直接合并成一行表头
  • 如果需要直接修改原文件,加上-i参数(macOS系统要写成sed -i '' '1N;s/\n/,/' your_file.csv)

方法2:用awk处理带引号的复杂CSV

如果你的表头里有带逗号的字段(比如"Full Name, First"这种带引号的内容),sed的简单替换会误判逗号位置,这时候用awk处理更稳妥:

awk '
    BEGIN { FS = ","; OFS = "," }
    NR == 1 {
        # 拆分第一行表头到数组
        split($0, header_top, FS)
        field_count = length(header_top)
        next
    }
    NR == 2 {
        # 拆分第二行表头,和第一行对应合并
        split($0, header_bottom, FS)
        for (i = 1; i <= field_count; i++) {
            # 这里用下划线连接两行表头字段,你可以改成空格或直接拼接
            printf "%s%s", header_top[i] "_" header_bottom[i], (i == field_count ? "\n" : OFS)
        }
        next
    }
    # 输出表头之后的所有内容
    { print }
' your_file.csv

效果示例:

原CSV表头:

"Full Name",Age,"Residence City"
First,Last,Current

合并后表头:

"Full Name"_First,Age_Last,"Residence City"_Current

你可以把代码里的"_" header_bottom[i]改成header_bottom[i],实现直接拼接(比如"Full Name"First)。

方法3:用paste命令合并(极简场景)

如果只是想快速把两行表头按列用逗号连接,paste命令也能搞定:

# 合并前两行表头,再输出后面的内容
paste -d',' <(head -n1 your_file.csv) <(head -n2 your_file.csv | tail -n1) && tail -n+3 your_file.csv

命令解释:

  • head -n1提取第一行表头,head -n2 | tail -n1提取第二行表头
  • paste -d','把两行按列用逗号连接
  • && tail -n+3输出表头之后的所有数据行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:29:30