comparando valores em colunas separadas

3

Eu tenho um csv que se parece com isso, (existem outras colunas, mas estas são as pertinentes)

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

O que eu quero fazer é região de saída e cidade onde a classificação real não esteja dentro da porcentagem mais próxima de 0.5 , ou seja, produziria NSW, SYD porque 0.765 está mais próximo de 1.0 than 0.5 . Eu tentei fazer variações em awk para fazer isso descobrindo o arredondamento:

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

mas não sei como preservar outros campos quando estou editando um em particular, então estou preso a essa etapa

    
por jdosha 23.03.2016 / 15:08

1 resposta

1

Com base nos dados mostrados, a classificação prevista é um múltiplo de 0,5, portanto, a condição "a classificação real não está dentro do 0,5" mais próximo é equivalente a "a classificação real difere em mais de 0,5 / 2". Então teste isso. O awk padrão não tem função de valor absoluto, então você precisa combinar dois testes.

Para imprimir os dois primeiros campos, imprima $1 e $2 . Defina OFS para uma vírgula para tê-los separados por vírgulas; Como alternativa, você pode usar print $1 "," $2 .

awk -F, -v OFS=, '$4 - $3 < -0.25 || $4 - $3 > 0.25 {print $1, $2}'
    
por 24.03.2016 / 01:24