数组变量的百分比计算
Percentage calculation on array variables
我有如下输入
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]
if [ 100 - 70 * 100 / 100 > 30] 我需要打印该行。
如何在 shell 脚本中处理数组的百分比计算?
如果您不介意因 bash 不支持浮点或小数运算而造成的精度损失,您可以执行
if (( ${log_array[$i]} - ${lag_array[$j] * 100 / ${log_array[i]} > 20 ))
then
...
fi
因为您已经使用 awk
创建数组 log_array
和 lag_array
,所以我建议在一个 awk
命令中完成所有操作。这不仅写起来更短,执行起来更快,而且更精确,因为 awk
支持浮点数,而 bash
不支持。
awk 'NR>1 && (-)/ > 0.3' inputFile
这从 inputFile
中读取 table 并打印出 Log-Lag 大于 [=35 的 30% 的那些行=]日志.
如果你还想打印百分比使用
awk 'NR>1 && (p=(-)/)>0.3 {print [=11=], p}' inputFile
注意:我认为公式是错误的,因为您示例中的所有百分比都大于 90%。您没有明确说明应该如何计算 "百分比差异"。但是,我怀疑以下内容:
Log-Lag 是 H 百分比的 Log:
Log * H/100 = Log-Lag
,因此 H = (Log-Lag)/Log * 100
现在计算 100%(Log 的“百分比”)和 H 之间的差异 D:
D = 100-H
在这种情况下,脚本将是
awk 'NR>1 && (p=1-(-)/)>0.3 {print [=12=], p}' inputFile
我有如下输入
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]
if [ 100 - 70 * 100 / 100 > 30] 我需要打印该行。
如何在 shell 脚本中处理数组的百分比计算?
如果您不介意因 bash 不支持浮点或小数运算而造成的精度损失,您可以执行
if (( ${log_array[$i]} - ${lag_array[$j] * 100 / ${log_array[i]} > 20 ))
then
...
fi
因为您已经使用 awk
创建数组 log_array
和 lag_array
,所以我建议在一个 awk
命令中完成所有操作。这不仅写起来更短,执行起来更快,而且更精确,因为 awk
支持浮点数,而 bash
不支持。
awk 'NR>1 && (-)/ > 0.3' inputFile
这从 inputFile
中读取 table 并打印出 Log-Lag 大于 [=35 的 30% 的那些行=]日志.
如果你还想打印百分比使用
awk 'NR>1 && (p=(-)/)>0.3 {print [=11=], p}' inputFile
注意:我认为公式是错误的,因为您示例中的所有百分比都大于 90%。您没有明确说明应该如何计算 "百分比差异"。但是,我怀疑以下内容:
Log-Lag 是 H 百分比的 Log:
Log * H/100 = Log-Lag
,因此 H = (Log-Lag)/Log * 100
现在计算 100%(Log 的“百分比”)和 H 之间的差异 D:
D = 100-H
在这种情况下,脚本将是
awk 'NR>1 && (p=1-(-)/)>0.3 {print [=12=], p}' inputFile