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

Bash如何根据指定列名提取CSV文件内容生成新文件

按列名提取CSV指定列的几种实现方式

方法1:使用awk(系统自带无需额外安装)

awk可以直接匹配表头定位列位置,不需要依赖第三方工具,适配没有安装权限的环境,命令如下:

awk -F ',' 'BEGIN{
  # 在这里定义需要提取的列名
  cols["First Name"]=1
  cols[" Last Name"]=1
  cols[" Nickname"]=1
}
NR==1{
  # 遍历表头获取对应列的序号
  for(i=1;i<=NF;i++){
    if(cols[$i]){
      col_idx[i]=1
      printf "%s,",$i
    }
  }
  print ""
}
NR>1{
  # 遍历字段输出对应列内容
  for(i=1;i<=NF;i++){
    if(col_idx[i]){
      printf "%s,",$i
    }
  }
  print ""
}' input.csv | sed 's/,$//' > output.csv

注意:如果你的CSV字段内部包含逗号、换行符等特殊字符,这个简易awk方案不适用,建议使用后面的专用CSV处理方案

方法2:使用csvkit专用CSV处理工具

csvkit是专门面向CSV文件的命令行工具集,其中的csvcut命令原生支持按列名提取字段,用法和你预想的cut逻辑几乎一致:

  1. 先安装csvkit:
    • Debian/Ubuntu系:sudo apt install csvkit
    • 全平台通用(有Python环境):pip install csvkit
  2. 提取列命令:
    csvcut -c "First Name, Last Name, Nickname" input.csv > output.csv
    

这个方案原生支持带特殊字符的标准CSV格式,兼容性最好。

方法3:使用Python快速实现

如果不想额外安装工具,也可以写几行Python脚本实现,依赖Python标准库的csv模块,天然支持标准CSV格式:

import csv

# 配置需要保留的列名,注意和表头的空格完全匹配
keep_cols = ["First Name", " Last Name", " Nickname"]

with open("input.csv", "r", encoding="utf-8") as infile, open("output.csv", "w", encoding="utf-8", newline="") as outfile:
    reader = csv.DictReader(infile)
    writer = csv.DictWriter(outfile, fieldnames=keep_cols)
    writer.writeheader()
    for row in reader:
        writer.writerow({col: row[col] for col in keep_cols})

直接运行上述脚本即可得到目标文件。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 17:45:01