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

如何使用awk将7个含通用货币列的计数文件合并为汇总文件

使用Awk合并多文件货币计数为CSV汇总表

嗨,作为Unix/awk新手,这个需求其实用awk就能轻松搞定!我来给你一步步拆解解决方案,保证你能看懂并直接用上。

核心思路

我们需要遍历所有7个文件,把每个货币在不同文件里的计数存起来,最后按CSV格式输出表头和每一行的汇总数据。awk的数组非常适合做这种跨文件的数据聚合。

完整Awk脚本

把下面的代码保存成merge_currency.awk文件:

BEGIN {
    # 设置输出分隔符为逗号,确保是CSV格式
    OFS = ","
    # 构建表头:先写currency,再依次添加Count_1到Count_7
    header = "currency"
    for (i=1; i<=7; i++) {
        header = header OFS "Count_" i
    }
    print header
}

# 每个文件的第一行执行,提取当前文件的编号
FNR == 1 {
    # 这里假设文件名是file1、file2...file7,从文件名里提取数字
    # 如果你的文件名是其他格式(比如data_01.txt),可以用下面的正则匹配方式替代:
    # match(FILENAME, /[0-9]+/); file_num = substr(FILENAME, RSTART, RLENGTH)
    file_num = substr(FILENAME, 4)
}

# 处理每个文件里的每一行数据(格式:计数 货币)
{
    # 把当前货币在当前文件的计数存入二维数组
    arr[$2][file_num] = $1
}

END {
    # 遍历所有货币,输出每一行的汇总数据
    for (currency in arr) {
        line = currency
        # 依次拼接每个文件的计数
        for (i=1; i<=7; i++) {
            # 如果某个文件没有该货币(题目说不会出现,但保险起见),可以改成arr[currency][i]+0输出0
            line = line OFS arr[currency][i]
        }
        print line
    }
}

怎么运行脚本

在终端里执行下面的命令,把7个文件作为参数传入,输出结果保存到summary.csv:

awk -f merge_currency.awk file1 file2 file3 file4 file5 file6 file7 > summary.csv

脚本细节解释

  • BEGIN块:在处理任何文件前运行,负责设置CSV的分隔符,生成并打印表头。
  • FNR == 1:每个文件的第一行触发,用来识别当前处理的是第几个文件,这样我们才能把计数对应到Count_1到Count_7的列里。
  • 数据处理行:把每一行的计数和货币对应起来,存到二维数组arr中,arr[货币][文件编号] = 计数。
  • END块:所有文件处理完后,遍历每个货币,把它在7个文件里的计数拼接成一行,打印出来。

适配不同文件名

如果你的文件名不是file1这种简单格式,比如是currency_data_1.csv,可以把提取文件编号的代码改成正则匹配:

FNR == 1 {
    match(FILENAME, /[0-9]+/)
    file_num = substr(FILENAME, RSTART, RLENGTH)
}

这样不管文件名里的数字在哪里,都能准确提取出来。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:59:34