2

我的文件内容如下:

0.23423
0.10093
0.44231
0.45630
0.89999

我想将每个数字增加给定的百分比,例如 20%。所以,我想知道如何将每个值乘以 1.2。

我需要施加的“约束”是乘积小于或等于 1,因为这些值是概率。

因此,在伪代码中,我需要X将给定文本文件中的每个数字替换为max(1.0,X*1.2).

如何在 Awk 中实现这一点?

4

2 回答 2

3

在单行中使用类 C三元运算符:

awk '{res = $1 * 1.2; print (res > 1) ? 1 : res}' file
0.281076
0.121116
0.530772
0.54756
1
于 2013-08-25T16:31:05.797 回答
3

试试这个单行:

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
于 2013-08-25T16:30:30.120 回答