AWK - замена двух команд «printf, print» одной командой «printf»? - PullRequest
1 голос
/ 17 марта 2012

Пожалуйста, помогите решить эту проблему.

У меня есть эта команда:

awk 'BEGIN {printf "%-15s", "Date of birth:" > "/dev/stderr"; getline var; print "Today finished:", var ,"days"}'

Как мне распечатать 'var' только с первой командой 'printf'?Можно ли удалить вторую команду «печать»?

Спасибо за помощь.

РЕДАКТИРОВАТЬ-1:

ответить за Мат

Первый пример хорош, но выводит 'var' в следующей строке.Можно ли напечатать 'var' в той же строке?

EDIT-2:

ответ для Peter.O

Спасибо за вашу помощь.Именно суть.Данные будут использованы для дальнейших расчетов.Результат расчета будет напечатан в той же строке.Пример:

awk 'BEGIN {printf "%-15s", "Date of birth:" > "/dev/stderr"; getline var; print "Today finished:", var ,"days"}'`

Что я хочу получить результат:

Date of birth: 2011-02-23 Today finished: 2011-02-23 days

РЕДАКТИРОВАТЬ-3:

ответ для shellter

Спасибо за ваши комментарии.

1 Ответ

1 голос
/ 17 марта 2012

В вашем примере кода вы перенаправили printf на stderr.Я предполагаю, что это потому, что вы не хотите, чтобы "Enter the date:" шел к окончательному выводу (stdout), который будет обрабатываться дальше ... Это работает и является чистым способом избавления от этого нежелательного текста.

Итак, если вы хотите, чтобы ваш форматированный вывод:
Date of birth: 2011-02-23 Today finished: 2011-02-23 days
перешел на стандартный вывод (stdout), тогда ответ на ваш вопрос прост: вам обязательно нужно вызвать другой экземпляр print/printf, который направлен на стандартный выход.

print/printf не имеет понятия , где выводится;он просто печатает ... Оператор перенаправления > не имеет никакого отношения к внутренним операциям печати (f), поэтому вы не можете получить один вызов print (f) отправить некоторые выходные данные на stderr, а остальные на stdout.

...