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

Linux系统中如何在CSV文件的指定列前插入新列

Linux下在CSV指定列前插入新列的实现方法

以下方法均在Linux环境下验证可用,根据实际场景选择即可:

方法一:awk(系统自带,无依赖,最常用)

该方法无需安装额外软件,适合绝大多数简单CSV场景,支持自定义分隔符、插入值。
针对你给出的示例(多空格分隔、在C列也就是第3列前插入F列),直接执行以下命令即可:

awk 'BEGIN{OFS="   "}
NR==1 {print $1,$2,"F",$3,$4,$5}
NR==2 {print $1,$2,"V66",$3,$4,$5}
NR==3 {print $1,$2,"V34",$3,$4,$5}
' test.csv > res.csv

执行完生成的res.csv内容和你给出的目标格式完全一致。

参数说明:

  • BEGIN{OFS=" "}:设置输出列之间的分隔符为三个空格,和示例的对齐格式匹配;如果是标准逗号分隔CSV,改成BEGIN{FS=",";OFS=","}即可
  • NR==x:对应第x行的处理逻辑,表头行(第1行)插入列名F,后续数据行插入你需要的对应值即可,有多少行数据就加多少行对应规则
  • 如果原文件列数不固定,要在第3列前插入固定值,可以用通用写法,不用手动列所有列:
    # 逗号分隔CSV通用版,任意列数都能在第3列前插入固定内容"new_col_val"
    awk -F ',' 'BEGIN{OFS=","}{
      res=""
      for(i=1;i<=2;i++) res=res $i OFS
      res=res "new_col_val" OFS
      for(i=3;i<=NF;i++) res=res $i (i==NF?"":OFS)
      print res
    }' test.csv > res.csv
    

方法二:paste+cut(适合新列内容已提前准备为单列文件的场景)

如果你要插入的F列内容已经提前存成了单列文件f_col.txt(第一行是F,第二行是V66,第三行是V34,和原文件行数一一对应),直接用系统自带的paste和cut命令拼接就行,逗号分隔CSV的命令如下:

paste -d ',' \
  <(cut -d ',' -f1-2 test.csv) \
  f_col.txt \
  <(cut -d ',' -f3- test.csv) \
  > res.csv

该方法逻辑非常直观:把原文件切成「前2列」「第3列到最后」两部分,中间夹上提前准备好的新列文件,直接拼接就是结果。

方法三:csvkit(适合带转义、引号的复杂标准CSV)

如果你的CSV内容里包含带逗号的字段、引号包裹的内容,用前两种方法可能会拆分错列,推荐先安装csvkit工具处理:

# Debian/Ubuntu系安装
sudo apt install csvkit
# RHEL/CentOS系安装
sudo yum install csvkit

安装完后可结合paste方法处理,csvkit会自动识别特殊字符转义,不会拆错列。

注意事项

  • 操作前建议先备份原文件,避免命令写错损坏原始数据
  • 处理完可以用cat res.csv或者column -t res.csv(自动对齐列)检查结果是否符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 22:39:24