Непоследовательное поведение AWK при фильтрации чисел в экспоненциальном представлении

Многоадресная рассылка может представлять большую нагрузку для коммутаторов -маршрутизаторов (, не говоря уже об аспекте безопасности с потенциальными DoS-атаками ). На коммутаторе (или мосте Linux ), отслеживание многоадресной рассылки находится на сетевом уровне 2.5 и предназначено для снижения нагрузки на:

  • отслеживание сетевого трафика
  • идентификация многоадресных каналов, на которые подписан каждый порт коммутатора
  • фильтрация другого многоадресного трафика

Как это ни звучит, это всегда желательная функция (, если только вы не хотите отлаживать многоадресный трафик ). Так зачем отключать отслеживание многоадресной рассылки?

Поскольку вы столкнулись с ошибкой, с которой я столкнулся несколько лет назад с Corosync и двумя виртуальными машинами на двух разных хостах, :трафик идет нормально до определенного момента, когда кажется, что весь входящий многоадресный трафик отбрасывается хостом (, хотя его iptableтаблицы совершенно пусты ). Насколько я знаю, это была ошибка в ядре 3.x, и мне пришлось отключить отслеживание многоадресной рассылки так же, как и вам. Если мне не изменяет память, в то время я использовал Debian (Wheezy или Jessie ), но этот отчет об ошибке RedHat точно описывает мою проблему.

Как объяснено в этом отчете об ошибке, если у вас есть возможность, предпочтительнее:

echo 1 > /sys/devices/virtual/net/br0/bridge/multicast_querier

, чем:

echo 0 > /sys/devices/virtual/net/br0/bridge/multicast_snooping

0
07.12.2019, 02:00
1 ответ

Эта проблема может быть воспроизведена на экземплярах awkбез поддержки MPFR или MP для множественной точности. Существует ограничение~e-308и e+308для очень больших или очень маленьких чисел.

См. Таблицу 16.1 здесь:https://www.gnu.org/software/gawk/manual/gawk.html#Computer-Arithmetic

См. также:https://www.gnu.org/software/gawk/manual/html_node/MPFR-features.html

Вы можете узнать, поддерживает ли ваш awkмножественную -точность, из выводаawk --version(см. выше ссылку ). Также опция -Mне будет работать, если поддерживается только двойная точность.


Например, для GNU Awk 4.2.1, API: 2.0без MPFR я запускаю этот пример (не воспроизводимый с awk 5)

$ cat file
1e-305
1e-306
1e-307
1e-308
1e-309
1e-310
$ awk '$0+0 > 0' file
1e-305
1e-306
1e-307

Обратите внимание, что $0+0оценивается как ноль в случае, если $0является строкой, не представляющей допустимое число. Также любое сравнение, такое как $0>0, будет строковым, а не числовым сравнением для этих случаев.

1
06.12.2020, 14:20

Теги

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