Пропавшие без вести функции плавающей в awk на RHEL 5.8

Можно выполнить команду на удаленном сервере, не входя в систему как это:

ssh -lUSERNAME SERVER COMMAND

например.

ssh -lsomeuser someserver 'mv .zshrc .zshrc.bak'

Команда, данная как последний аргумент ssh будет выполняться неинтерактивной оболочкой и командами от .zshrc только выполняются интерактивными оболочками (см. zsh страница справочника, разделите на запуске и файлах завершения работы).

1
26.11.2012, 22:15
2 ответа

Солярис /usr/bin/awk очень старый awk, который не поддерживает функции пользователя. Таким образом в этом awk, float(123) совпадает с anything(123) или anything 123, это - конкатенация значения float или anything переменная (пустой, если не набор) и 123. Так, это не ошибка, но это ничего не делает.

Вы записали

echo "Foampile=123" | awk -F '=' '{float="x"; print float($2) "<->" $1}'

Вы видели бы

x123<->Foampile

Я не думаю, что существует любая awk реализация, которая имеет a float функция.

Что Вы ожидали бы что функция делать так или иначе?

С другой стороны, современный POSIX awks как Солярис /usr/xpg4/bin/awk или nawk или gawk действительно поддерживайте функции пользователя, таким образом, в тех, если Вы не определяете float или anything функция, Вы будете видеть ту ошибку.

echo "Foampile=123" | awk -F '=' '{ print $2 "<->" $1 }'

работал бы точно то же (и будет работать с современным awks).

В современном awks, для устранения неоднозначности между вызовом функции и конкатенацией переменной и чего-то в фигурной скобке необходимо добавить по крайней мере одно дополнительное пространство:

$ echo x | awk '{print foo ($1)}'
x
$ echo x | awk 'function foo(x) {return "y"}; {print foo($1)}'
y
2
27.01.2020, 23:39
  • 1
    я перемещаю некоторые сценарии (что я не записал) от SunOS-> RHEL. Моя цель состоит в том, чтобы заставить сценарий делать то же самое как в предыдущей ОС путем оценки входов и выходов, но не действительно дайвинга в почему вещи как float и такой использовались. Надежда это имеет смысл. –  amphibient 26.11.2012, 23:09

Я думаю, что это - Солярис определенная функция. Вы, возможно, должны были бы вместо этого использовать printf или sprintf и указать плавание.

awk 'BEGIN {printf "%1##f\n", "<->" $1}

0
27.01.2020, 23:39
  • 1
    в Солярисе я не получаю ошибку. в RHEL я делаю. –  amphibient 26.11.2012, 23:11
  • 2
    @foampile необходимо заменить "##" вещественными числами. –  jordanm 26.11.2012, 23:25

Теги

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