如何使用bash或awk从文本文件提取数值并执行算术运算
不考虑科学计数法的最简方案
优先推荐这个适配常规场景的版本,代码最简洁,可直接输出运算结果:
awk '/number/{n[++i]=$2} END{print 10*(n[1]+n[2])/(n[1]-n[2])}' FILE
如果需要把两个数值提取为bash变量单独复用,可使用以下写法:
# 提取数值到变量 num1=$(awk '/number1/{print $2}' FILE) num2=$(awk '/number2/{print $2}' FILE) # 执行运算得到结果 result=$(awk -v a="$num1" -v b="$num2" 'BEGIN{print 10*(a+b)/(a-b)}') # 打印结果验证 echo $result
兼容科学计数法的方案
awk原生支持6.145E-03这类科学计数法格式的数值解析,如需兼容特殊场景,无需改动上面的逻辑,直接执行即可。如果需要固定输出格式(比如保留3位小数,避免输出自动转为科学计数法),可以把print替换为printf指定格式:
awk '/number/{n[++i]=$2} END{printf "%.3f\n", 10*(n[1]+n[2])/(n[1]-n[2])}' FILE
可选优化(除零错误规避)
如果存在num1和num2相等的可能,可增加判断逻辑避免除零报错:
awk '/number/{n[++i]=$2} END{ if(n[1] == n[2]){ print "错误:两数相等无法执行除法" } else { printf "%.3f\n", 10*(n[1]+n[2])/(n[1]-n[2]) } }' FILE
内容的提问来源于stack exchange,提问作者user9094625
相关产品推荐
相关产品推荐

