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

RHEL7.4下合并4个同结构文件的SUM数据用于gnuplot

搞定RHEL7.4下多文件字段按日期汇总(适配gnuplot)

嘿,我来帮你解决这个汇总需求!在RHEL7.4上用系统自带的awk工具就能轻松实现,不用额外装软件,完全符合你要的格式要求,一步步来:

1. 先明确原文件格式前提

我先假设你的101-104.txt每行是日期 + 字段名 + 数值的结构(比如 2024-01-31 received 28131),如果你的格式是CSV或者其他分隔方式,后面的脚本可以简单调整,我会顺便提一下。

2. 写个awk脚本实现累加

创建一个叫sum_fields.awk的脚本文件,把下面的内容粘进去:

# 遍历所有输入文件的每一行,用日期+字段名当唯一键来累加数值
{
    key = $1 " " $2
    total[key] += $3
}

# 所有文件处理完后,按原格式输出汇总结果
END {
    for (k in total) {
        split(k, parts, " ")
        print parts[1], parts[2], total[k]
    }
}

这个脚本的逻辑很简单:把每个日期+字段的组合当成唯一标识,把对应数值累加起来,最后再按原文件的格式输出。

3. 执行脚本生成汇总文件

打开终端,跑到你存放这些txt文件的目录,执行下面的命令:

awk -f sum_fields.awk 10[1-4].txt > summary_data.txt

这条命令会把101到104四个文件都喂给awk脚本,最后生成summary_data.txt就是你要的汇总文件。

4. 验证结果是否符合要求

比如如果101.txt和102.txt里都有2024-01-31 received 28131,那汇总后的文件里对应行就是2024-01-31 received 56262,完全和你说的一致,而且格式和原文件一模一样,直接就能给gnuplot用。

额外:如果原文件是CSV或其他分隔格式

要是你的文件是CSV(比如2024-01-31,received,28131),只需要修改脚本的开头,指定分隔符就行:

BEGIN { FS = "," }  # 把分隔符设为逗号
{
    key = $1 "," $2
    total[key] += $3
}
END {
    for (k in total) {
        print k "," total[k]
    }
}

执行命令还是类似的,把输出改成.csv后缀就行:

awk -f sum_fields.awk 10[1-4].txt > summary_data.csv

这样生成的文件直接就能在gnuplot里用,比如画received字段的趋势图,直接用plot "summary_data.txt" using 1:3 title "Received Total" with lines这类命令就OK了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:05:01