我的文件包含以下内容:
0.23423
0.10093
0.44231
0.45630
0.89999
我希望按照给定的百分比增加每个数字,比如20%。所以,我想知道如何将每个值乘以1.2。
我需要强加的“约束”是产品小于或等于1,因为这些值是概率。
因此,在伪代码中,我需要用X
替换给定文本文件中的每个数字max(1.0,X*1.2)
。
如何在Awk中实现这一目标?
答案 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