Я бы не предположил, что gawk может выяснить, что такое число против строки, учитывая ваши входные и жестко заданные значения. Убедитесь, что они обрабатываются как числа, используя strtonum()
на них:
$ gawk 'strtonum($2) < strtonum("5e-4")' file
A 3.92e-373
B 5e-300
C 5e-20
D 5e-6
$ gawk 'strtonum($2) < strtonum("5e-8")' file
A 3.92e-373
B 5e-300
C 5e-20
Вы можете увидеть, с какими типами думает gawk, вызвав typeof () для каждого:
$ gawk '{print typeof($2), $2, typeof(5e-4), 5e-4, strtonum($2), strtonum("5e-4")}' file | column -t
string 3.92e-373 number 0.0005 0 0.0005
strnum 5e-300 number 0.0005 5e-300 0.0005
strnum 5e-20 number 0.0005 5e-20 0.0005
strnum 5e-6 number 0.0005 5e-06 0.0005
strnum 5e-3 number 0.0005 0.005 0.0005
Так что, похоже, strtonum("5e-4")
является избыточным, но ИМХО это улучшает ясность, поэтому я бы сохранил его.
Обратите внимание, что gawk автоматически не распознает 3.92e-373
как число, и поэтому сравнение для этого ввода будет строкой против числа, и это делается как сравнение строк (см. Таблицу в https://www.gnu.org/software/gawk/manual/gawk.html#Typing-and-Comparison).