我的文件内容如下:
0.23423
0.10093
0.44231
0.45630
0.89999
我想将每个数字增加给定的百分比,例如 20%。所以,我想知道如何将每个值乘以 1.2。
我需要施加的“约束”是乘积小于或等于 1,因为这些值是概率。
因此,在伪代码中,我需要X
将给定文本文件中的每个数字替换为max(1.0,X*1.2)
.
如何在 Awk 中实现这一点?
我的文件内容如下:
0.23423
0.10093
0.44231
0.45630
0.89999
我想将每个数字增加给定的百分比,例如 20%。所以,我想知道如何将每个值乘以 1.2。
我需要施加的“约束”是乘积小于或等于 1,因为这些值是概率。
因此,在伪代码中,我需要X
将给定文本文件中的每个数字替换为max(1.0,X*1.2)
.
如何在 Awk 中实现这一点?
在单行中使用类 C三元运算符:
awk '{res = $1 * 1.2; print (res > 1) ? 1 : res}' file
0.281076
0.121116
0.530772
0.54756
1
试试这个单行:
awk '{p=1.2*$0;$0=p>1?1:p}7' file
用你的例子测试:
kent$ cat f
0.23423
0.10093
0.44231
0.45630
0.89999
kent$ awk '{p=1.2*$0;$0=p>1?1:p}7' f
0.281076
0.121116
0.530772
0.54756
1
如果你想保持浮点数的精度,你可以使用printf
:
awk '{p=1.2*$0;$0=p>1?1:p;printf "%.5f\n",$0}' file
使用相同的输入,它给出:
kent$ awk '{p=1.2*$0;$0=p>1?1:p;printf "%.5f\n",$0}' f
0.28108
0.12112
0.53077
0.54756
1.00000