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

如何泛化支持N个文件的CSV合并并新增来源列的awk程序?

通用CSV合并并添加来源标识的awk方案

核心思路

通过命令行参数传递新增列名,以及每个文件对应的标识(格式为标识:文件名),让awk自动识别每个文件的来源标记,无需修改脚本即可处理任意数量的CSV文件。

实现脚本(merge_csv.awk)

BEGIN {
    FS = ","
    OFS = ","
    # 解析命令行参数:提取标识与文件名的映射,同时更新ARGV列表
    for (i = 1; i < ARGC; i++) {
        if (split(ARGV[i], parts, ":") == 2) {
            file_tag[parts[2]] = parts[1]
            ARGV[i] = parts[2]
        }
    }
    # 标记第一个文件,用于处理表头
    first_file = 1
}

# 处理表头:仅在第一个文件输出时添加新增列名
FNR == 1 {
    if (first_file) {
        print $0, col_name
        first_file = 0
    }
    next
}

# 处理数据行:追加对应文件的来源标识
{
    print $0, file_tag[FILENAME]
}

使用方法

命令格式

awk -v col_name="来源标识" -f merge_csv.awk 标识1:文件1.csv 标识2:文件2.csv ... 标识N:文件N.csv

示例

假设现有两个CSV文件:

  • numbers.csv内容:
id,value
1,100
2,200
  • letters.csv内容:
id,char
1,A
2,B

执行合并命令:

awk -v col_name="source" -f merge_csv.awk num:numbers.csv let:letters.csv

输出结果:

id,value,source
1,100,num
2,200,num
1,A,let
2,B,let

关键说明

  • -v col_name="来源标识":自定义新增列的名称,可按需修改。
  • 标识:文件名格式:给每个文件绑定专属来源标识,用冒号分隔,awk会自动拆分并关联两者。
  • 表头处理:仅在第一个文件输出时追加新增列名,避免重复输出表头。
  • 扩展性:支持任意数量的CSV文件,无需改动awk脚本本身。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 15:24:58