次の列があります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.0
0.5
awk
awk -F, '{$3=$3*2; printf "%0.0f\n",$3}'
しかし、特定のフィールドを編集しながら他のフィールドを維持する方法がわからないので、この段階で停止しました。
答え1
表示されたデータに基づいて推定すると、推定評価は0.5の倍数です。したがって、「実際の評価が0.5に近い」という条件は、「実際の評価が0.5/2以上異なる」と同じです。だからテストしてみてください。標準awkには絶対値関数がないため、両方のテストを組み合わせる必要があります。
最初の2つのフィールドを印刷するには、$1
とを印刷します$2
。OFS
カンマで区切るには、カンマで設定するか、を使用できますprint $1 "," $2
。
awk -F, -v OFS=, '$4 - $3 < -0.25 || $4 - $3 > 0.25 {print $1, $2}'