下午朋友对我说“awk中怎么计算某列的值为四舍五入”;我们知道awk中是没有round函数;那样怎么样达到四舍五入的效果呢?我当时就想就写一个自定义函数吧!正好练习下最近学习的awk语言!
function round(a){
b= int(a);
c=a* 10;
d=b* 10+ 5;
if (c>=d)
{
e=b+ 1;
}
else{
e=b;
}
return e;
}
b= int(a);
c=a* 10;
d=b* 10+ 5;
if (c>=d)
{
e=b+ 1;
}
else{
e=b;
}
return e;
}
测验这个函数;round.awk
function round(a){
b= int(a);
c=a* 10;
d=b* 10+ 5;
e=(c>=d)?(b+ 1):b;
return e;
}
{
print round( 3.25),round( 3.5),round( 4.6),round( 5.1);
}
b= int(a);
c=a* 10;
d=b* 10+ 5;
e=(c>=d)?(b+ 1):b;
return e;
}
{
print round( 3.25),round( 3.5),round( 4.6),round( 5.1);
}
预期结果应该是3,4,5,5
运行的代码是 echo aebcd | awk -f round.awk
测试结果是 3,4,5,5
后来查看资料还可以这样实现;利用printf函数
例如:echo adf | awk '{printf("%0.f\n",3.25)}' 结果也是3;也可以达到效果!