如何在命令行(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
相关产品推荐
相关产品推荐

