LINUX.ORG.RU

Как в awk правильно сравнивать не целые числа

 , , ,


0

2

Вот есть такой код:

awk ' 
    {
        c=0
        $0=$0","
        namep=0
        minc=0
        while ($0)  
        {
            match($0,/ *"[^"]*"*,|[^,]*,/)
            f=substr($0,RSTART,RLENGTH)             
            gsub(/^"?|"?,$/,"",f)
            ++c
            if (c==1)
                namep=f
            else if (c==2)
                minc=f
            else if (c>2)
            {
                if (minc>f)
                {
                    minc=f
                }
            }
        $0=substr($0,RLENGTH+1)      
        }
    print namep ": " minc
    }' Srednije_tseny_za_ijul_2018.txt

Отрабатывает хорошо. Парсит строку вида:

БРИТВА ЭЛЕКТРИЧЕСКАЯ,«89,42»,«92,74»,«84,38»,«104,98»,«65,63»,«79,97»,99

На выводе должны получить название и минимальную цену, но в итоге оказывается что 104,98 это минимум. При сравнении допустим 84,38 и 92,74 выбирает правильно 84,38. Но если уже сравнивается 104,98 и 84,38 меньшим оказывается 104,98.

Почему так? И как правильно это делать?



Последнее исправление: rakuz (всего исправлений: 1)

Ответ на: комментарий от WoozyMasta

Не помогло. Тоже самое. Кстати заметил, если целая часть состоит из одинакового количества знаков, то сравнивает нормально.

rakuz
() автор топика

Про точку правильно, а вот ещё из документации:

To force a variable to be treated as a number, add 0 to it; to force it to be treated as a string, concatenate it with the null string.

unDEFER ★★★★★
()

Посмотри вывод

echo "101.1
101,1
102" | awk '{ print(90>$0, 101.1>$0)}'
смекаешь?

Люблю авк, но работать с ним с csv - фу.

legolegs ★★★★★
()
Ответ на: комментарий от aureliano15

Не ведущих. Арифметическая операция имеется в виду - прибавить 0.

unDEFER ★★★★★
()

Опять школота, которой лень сделать домашку?

slamd64 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.