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

编写Shell脚本计算两个文件对应行的百分比变化

解决对应行百分比变化计算的Shell脚本方案

我来帮你搞定这个需求!要计算两个文件对应行的百分比变化,还能定时每5分钟自动处理,用Shell脚本结合几个基础工具就能轻松实现。

单次计算的核心逻辑

首先,我们可以用paste命令把a.txt和b.txt的对应行合并到一起,然后用awk来做数值计算。假设你要的是相对于b.txt数值的百分比变化,公式就是:((a_value - b_value) / b_value) * 100(如果你的基准是a.txt,把分母换成a_value就行)。

直接在终端运行这条命令就能得到结果:

paste a.txt b.txt | awk '{change = (($1 - $2)/$2)*100; printf "%.6f%%\n", change}'
  • paste a.txt b.txt:把两个文件的对应行合并,每行的两个数值用制表符分隔
  • awk部分:提取每行的第一个值(a.txt的数)和第二个值(b.txt的数),计算百分比变化,用printf格式化输出保留6位小数并加上百分号

如果你需要把结果保存到新文件里,直接重定向就行:

paste a.txt b.txt | awk '{change = (($1 - $2)/$2)*100; printf "%.6f%%\n", change}' > result.txt

封装成可复用的脚本

把上面的逻辑写成一个脚本文件,比如calculate_change.sh,方便后续定时调用:

#!/bin/bash

# 定义文件路径(根据你的实际路径调整)
FILE_A="./a.txt"
FILE_B="./b.txt"
RESULT_FILE="./change_result.txt"

# 检查文件是否存在
if [ ! -f "$FILE_A" ] || [ ! -f "$FILE_B" ]; then
    echo "错误:a.txt或b.txt不存在!"
    exit 1
fi

# 检查行数是否一致(可选,因为你说每次记录数一致,但加个保险)
lines_a=$(wc -l < "$FILE_A")
lines_b=$(wc -l < "$FILE_B")
if [ "$lines_a" -ne "$lines_b" ]; then
    echo "错误:两个文件行数不一致!"
    exit 1
fi

# 计算百分比变化并保存结果
paste "$FILE_A" "$FILE_B" | awk -v result="$RESULT_FILE" '{
    change = (($1 - $2)/$2)*100;
    printf "%.6f%%\n", change > result
}'

echo "计算完成,结果已保存到$RESULT_FILE"

给脚本加执行权限:

chmod +x calculate_change.sh

运行脚本测试:

./calculate_change.sh

每5分钟自动执行(定时任务)

用crontab来设置定时任务,让脚本每5分钟跑一次:

  1. 编辑crontab配置:
crontab -e
  1. 在末尾添加一行(注意替换成你的脚本实际路径):
*/5 * * * * /path/to/your/calculate_change.sh >> /path/to/your/cron_log.log 2>&1
  • */5 * * * *:表示每5分钟执行一次
  • 后面的>> /path/to/your/cron_log.log 2>&1是把脚本的输出和错误信息保存到日志文件,方便排查问题

保存退出后,crontab就会自动生效了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:33:54