比较不同列中的值

比较不同列中的值

我有一个csv看起来像这样的,(还有其他列,但这些是相关的)

region, city, actual rating, predicted rating
NSW, SYD, 0.765, 0.5
Victoria, Melbourne, 4.81225, 5.0

我想要做的是输出实际评级不在最近的区域和城市0.5,即它会输出,NSW, SYD因为更0.765接近于。我尝试通过计算舍入来进行变体来做到这一点:1.00.5awk

awk -F, '{$3=$3*2; printf "%0.0f\n",$3}'

但我不确定在编辑特定字段时如何保留其他字段,因此我陷入了这一步

答案1

从您显示的数据推断,预测评分是 0.5 的倍数,因此“实际评分不在最接近的 0.5 范围内”条件相当于“实际评分相差超过 0.5/2”。所以测试一下。标准 awk 没有绝对值函数,因此您需要结合两个测试。

要打印前两个字段,请打印$1$2。设置OFS为逗号以使它们以逗号分隔;或者你可以使用print $1 "," $2.

awk -F, -v OFS=, '$4 - $3 < -0.25 || $4 - $3 > 0.25 {print $1, $2}'

相关内容