Как сравнить переменные с плавающей точкой в ​​awk?

awk -F, 'NR==FNR{c[$29]=$29;next} NF{print $29 ((c[$29]==$29)?" ":",mismatch")}' $file1 $file2

Значение 29-го поля, то есть 29 долларов в файле1, составляло 832,9, а файла 2 - 832,9000. Если я сравню их, они не равны. Я думаю, что это скорее строка, а не число.

Как мне поступить?

0
задан 20 April 2015 в 14:57

1 ответ

awk сравнивает числа с плавающей точкой:

я просто записал новый сценарий:

paste \
    <(awk -F, '{print $29}' file1 ) \
    <(awk -F, '{print $29}' file2 ) \
    | awk '{print $1; print $2; print ($1==$2)?"match" :"mismatch"}'

, Если Вам не нравятся повреждения, затем используйте printf вместо print.

<час>

Пример

Входные файлы

cat file1

12,2,12,12,12,12,3,2,53,6,5474,346,567,6578,89,7689,7,987,69869,1,4,5,4,3,4,2,6,21,832.9,9,2
12,2,12,12,12,12,3,2,53,6,5474,346,567,6578,89,7689,7,987,69869,1,4,5,4,3,4,2,6,21,12.329,9,2

cat file2

12,2,12,12,12,12,3,2,53,6,5474,346,567,6578,89,7689,7,987,69869,1,4,5,4,3,4,2,6,21,832.9000,9,2
12,2,12,12,12,12,3,2,53,6,5474,346,567,6578,89,7689,7,987,69869,1,4,5,4,3,4,2,6,21,832.9000,9,2

Вывод

% paste <(awk -F, '{print $29}' file1 ) <(awk -F, '{print $29}' file2 ) | awk '{print $1; print $2; print ($1==$2)?"match" :"mismatch"}'

832.9
832.9000
match
12.329
832.9000
mismatch
3
ответ дан 21 April 2015 в 00:57

Другие вопросы по тегам:

Похожие вопросы: