Я пытаюсь извлечь сумму чисел в переменную (cwr) в файле (wa_cidr) с помощью этой команды:
cwr=$(grep -E "^([0-9]{1,3}\.){3}[0-9]{1,3}(\/([0-9]|[1-2][0-9]|3[0-2]))?$" /tmp/wa_cidr | awk -F '/' '`{n += 2**(32 - $NF)}` END {print n}')
Однако вывод пустой.
Если я поменяю часть...
{n += 2**(32 - $NF)}
To...
{n += (32 - $NF)}
Я получаю действительный результат, записанный в переменную cwr.
Казалось бы, я не могу использовать силу (32 - $NF), используя 2**X или 2^X в AWK.
Если я сделаю это в командной строке, например. с использованием...
$ echo $(2**5)
Нет проблем, и результат равен 32.
Я пробовал много вариантов формулы (круглые скобки и т. д.), но ничего не работает.
Что не так? Можно ли это сделать другим способом?
Спасибо, Сорен.
Stopped (tty input)
Я думаю, что в оболочке DD-WRT могут быть некоторые ограничения, но я не понимаю, почему простой расчет может вызвать проблемы. Чтобы уточнить: я пытаюсь извлечь CIDR из файла wa_cidr, получить число после косой черты (например, IP/30), вычислить количество IP-адресов в этом сегменте и вернуть результат в $cwr. Это работает с моей командой, за исключением того, что я не могу правильно рассчитать (степень) с этим числом. Я вижу, что ваш код лучше, но теперь я получаю эту ошибку...? Спасибо, Сорен. 30.10.2016)
, а не перед ней. Исправлено сейчас. Это одна из причин, по которой в ваших интересах всегда предоставлять проверяемый образец ввода/вывода при публикации вопроса (т. е. минимально воспроизводимый пример), потому что без него мы не сможем протестировать потенциальное решение перед его публикацией. 30.10.2016