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

MacOS Terminal按第一列值拆分CSV并生成对应TXT文件

解决MacOS终端拆分含特殊字符CSV的单条命令方案

由于你的CSV第二列包含空格、逗号、撇号及重音字符,普通按逗号分割的工具会解析出错,必须使用能正确识别CSV格式的方法,以下是两种可行的单条命令方案:

方案一:使用MacOS自带的BSD awk

MacOS的awk支持FPAT参数来精准匹配带引号的CSV字段,命令如下:

awk 'BEGIN { FPAT = "([^,]+)|(\"[^\"]+\")" } { 
    # 去除字段首尾的双引号(如果存在)
    key = gensub(/^"|"$/,"","g",$1)
    val = gensub(/^"|"$/,"","g",$2)
    # 替换文件名中的非法字符为下划线,避免创建文件失败
    safe_key = gensub(/[\/:*?"<>|]/,"_","g",key)
    filename = safe_key ".txt"
    # 首次写入分类时,先将分类值作为首行写入
    if (!(safe_key in seen)) {
        print key > filename
        seen[safe_key] = 1
    }
    # 追加第二列内容到对应文件
    print val >> filename
    close(filename)
}' input.csv

关键说明:

  • FPAT定义了CSV字段的匹配规则:要么是不含逗号的字符串,要么是被双引号包裹的任意字符串(可包含逗号、空格等特殊字符)
  • gensub用于清理字段的双引号,同时替换文件名中的非法字符(如斜杠、冒号)
  • close(filename)避免打开过多文件句柄,防止触发系统限制

方案二:使用MacOS自带的Python

如果awk语法让你觉得复杂,用Python的csv模块更直观,同样是单条命令:

python3 -c "import csv, os; from collections import defaultdict; 
data = defaultdict(list);
with open('input.csv', 'r', encoding='utf-8') as f:
    reader = csv.reader(f)
    # 若CSV无表头,删除下面这行
    next(reader)
    for row in reader:
        if row:
            data[row[0]].append(row[1])
for key, vals in data.items():
    # 替换文件名非法字符
    safe_key = key.translate(str.maketrans({'/':'_', ':':'_', '*':'_', '?':'_', '"':'_', '<':'_', '>':'_', '|':'_'}))
    filename = f'{safe_key}.txt'
    with open(filename, 'w', encoding='utf-8') as f_out:
        f_out.write(f'{key}\n')
        f_out.write('\n'.join(vals) + '\n')"

关键说明:

  • 用csv.reader原生解析CSV,完美兼容所有特殊字符
  • 代码包含跳过表头的逻辑,无表头时删除next(reader)即可
  • str.maketrans统一替换文件名中的非法字符,确保文件能正常创建

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 07:29:54