awk将文本文件中的所有数字乘以另一个约束的常量

时间:2013-08-25 16:24:50

标签: awk

我的文件包含以下内容:

0.23423
0.10093
0.44231
0.45630
0.89999

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

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

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

如何在Awk中实现这一目标?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:3)

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

awk '{res = $1 * 1.2; print (res > 1) ? 1 : res}' file
0.281076
0.121116
0.530772
0.54756
1