我有如下输入
Topic Current Log Lag
abc 324 22345 235
xyz 552 48453 1055
bcd 673 100546 3567
我的要求是找到Log和Lag值之间的百分比差异
如果百分比大于30,则需要整行打印在某些文件上。
将整个百分比公式应用于以下if语句不起作用。
if [${log_array[$i]} - ${lag_array[$j] * 100 / ${log_array[i]} -gt 30]
如果[100-70 * 100/100> 30]我需要打印该行。
如何在Shell脚本中对数组进行此百分比计算?
正如您已经awk
用来创建数组一样log_array
,lag_array
我建议您在单个awk
命令中完成所有操作。这不仅写起来短,执行起来快,而且由于awk
支持浮点数而更加精确,而bash
不能。
awk 'NR>1 && ($3-$4)/$3 > 0.3' inputFile
这将读取表inputFile
,并打印这些线路,其中差日志-滞后是大于30%日志。
如果您还想打印百分比使用
awk 'NR>1 && (p=($3-$4)/$3)>0.3 {print $0, p}' inputFile
注意:我认为该公式是错误的,因为示例中的所有百分比均大于90%。您没有完全指定应如何计算“百分比差异”。但是,我怀疑以下情况:
Log-Lag是Log:的H百分比,因此现在计算100%(Log的“百分比” )与H之间的差D:
Log * H/100 = Log-Lag
H = (Log-Lag)/Log * 100
D = 100-H
在这种情况下,脚本将是
awk 'NR>1 && (p=1-($3-$4)/$3)>0.3 {print $0, p}' inputFile
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句