Я не могу заставить awk
или gawk
читать небольшие числа с плавающей запятой в экспоненциальном представлении и правильно интерпретировать их как числа с плавающей запятой.
Я просто хочу выводить числа выше небольшого порога с помощью awk.
Пример:
рассмотрим следующий ввод:
4
3e-20
4.5e-320
3
1e-10
Я хочу установить порог на 1e-15, поэтому я делаю следующее:
echo -e "4\n3e-20\n4.5e-320\n3\n1e-10" | awk '$1 > 1e-15'
который дает вывод:
4
4.5e-320
3
1e-10
Конечно, 4.5e-320 не проходит порог 1e-15, но awk
и gawk
его не отвергают!
Я посмотрел (g)awk
точность с плавающей запятой. Похоже, что он применяется только к арифметическим операциям внутри awk.
Таким образом, замена awk '$1 > 1e-15'
на gawk -v PREC="double" '$1 > 1e-15'
также не работает. Это также не работает с PREC="quad"
таким образом, я заключаю, что (g)awk
не читается 4.5e-320 как число с плавающей запятой, а вместо этого строка?
4, 3, 1e-10
в качестве вывода вашей команды здесь. Какую версию awk вы используете? Какая локаль? Использование$1+0 > 1e-15
работает лучше? - person Etan Reisner   schedule 22.07.2015GNU Awk 4.1.1, API: 1.1
- person cmo   schedule 22.07.2015$1+0
сработал. это почему? может быть, вы можете представить в качестве ответа. Кроме того, какую локаль я должен использовать в awk? я вообще не знаком с локалями - person cmo   schedule 22.07.2015+0
заставляет awk преобразовать аргумент в число. - person Etan Reisner   schedule 22.07.2015