下午朋友对我说“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;也可以达到效果!