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

如何用Bash脚本匹配两个CSV文件行并累加Data列?

解决CSV文件按Account+Entity匹配累加Data的Bash方案

核心思路

利用Bash 4.0+支持的关联数组,将Account,Entity组合作为唯一键,对应存储Data的累加值。先读取第一个文件的所有数据存入数组,再读取第二个文件,匹配到已存在的键就累加Data,未匹配到则直接存入,最后输出合并后的结果。

完整脚本

#!/bin/bash

# 初始化关联数组
declare -A data_map

# 处理第一个CSV文件,跳过表头
while IFS=, read -r account entity data; do
    # 用"Account,Entity"作为数组键
    key="$account,$entity"
    # 将Data值存入数组
    data_map["$key"]=$data
done < <(tail -n +2 csv_file1.csv)

# 处理第二个CSV文件,跳过表头
while IFS=, read -r account entity data; do
    key="$account,$entity"
    # 如果键已存在,累加Data;否则直接赋值
    if [[ -v data_map["$key"] ]]; then
        data_map["$key"]=$(( data_map["$key"] + data ))
    else
        data_map["$key"]=$data
    fi
done < <(tail -n +2 csv_file2.csv)

# 输出表头
echo "Account,Entity,Data"

# 遍历关联数组,输出结果
for key in "${!data_map[@]}"; do
    echo "$key,${data_map[$key]}"
done

关键部分解释

  • declare -A data_map:声明一个关联数组,用于存储键值对,键是Account,Entity,值是累加后的Data。
  • IFS=, read -r account entity data:设置分隔符为逗号,逐行读取CSV的字段,-r避免转义字符被解析。
  • tail -n +2:跳过CSV的第一行表头,只处理数据行。
  • [[ -v data_map["$key"] ]]:检查数组中是否存在该键,存在则累加Data,否则新增键值对。

测试结果

用你提供的示例文件执行脚本后,输出如下:

Account,Entity,Data
A1101,E101,3000
A1101,E102,2000

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 10:44:59