printf из awk в shell-скрипте

Linux unix shell awk script

Есть файл 1.awk внутри которого печатается текст с помощью команды printf:
...
END { printf "%8s %-9d %-5d\n", "sometext", 2, 3 }
и если этот файл запустить, то вывод команды правильный - с табуляцией, учитывая ширину полей, и т.д.
НО! Если этот скрипт вызывается из shell-скрипта, то между данными только один пробел и никакие поля не соблюдаются.
Подскажите, пожалуйста, почему это происходит и как сделать вывод правильным?

Скрипт:
...
echo -e `echo "$TOPARSE" | awk -f ~/1.awk -v somevar=$SOMEVAL`
...
Ответы:
Команда echo воспринимает офторматированную строку как список аргументов, разделённых любым числом пробельных символов. То есть, строка
 echo preved      medved  1.2    1.4
воспринимается как
 echo preved medved 1.2 1.4
-- четыре аргумента, разделённых пробелами. Чтобы избавиться от этого эффекта, необходимо заключить шелл-код в кавычки, а внутренние кавычки заэкранировать обратным слешем:
 echo -e "`echo \"$TOPARSE\" | awk -f ~/1.awk -v somevar=$SOMEVAL`"
Примерно так.
Может упростить:
echo $TOPARSE | awk -f ~/1.awk -v somevar=$SOMEVAL


17 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.