Напечатать месяц между двумя словами

Используйте Gnome 3.20, который полностью поддерживает жесты сенсорной панели, в соответствии с примечаниями к выпуску .

3
05.06.2017, 19:48
3 ответа
date "+Left %b Right"

Вы можете разместить строки внутри самой команды date. Не проверено в разных ОС, но работает в дате GNU.

13
27.01.2020, 21:07

Это потому, что команда printкоманды awkпо умолчанию вставляет новую строку. Вы можете распечатать все сразу, чтобы использовался только один printвызов:

$ date +'%b' | awk '{print "Left " $1 " Right"}'
Left Jun Right

Или используйте printfвместо:

$ date +'%b' | awk '{printf "Left "; printf "%s", $1; printf " Right\n"}'
Left Jun Right

Использование printfздесь бессмысленно, я просто включил его в качестве примера и чтобы показать, что он не добавляет \nпо умолчанию.

8
27.01.2020, 21:07

Ваша строка awkна самом деле содержит два отдельных оператора. Здесь написано от руки

date +'%b' | awk '
    {print "Left " $1}
    {print "Right"}
'

Происходит следующее: для каждой строки ввода каждый awkоператор оценивается и выполняется. Эти два оператора не имеют необязательных выражений впереди (, например, $1 == "apple" { print "I love fruit" }, поэтому они всегда выполняются.

Таким образом, для каждой строки ввода (вашей единственной строки из dateкоманды )вы получите {print "Left " $1}, а затем {print "Right}. Операторы printзаканчивают свой вывод текущим разделителем выходных записей(ORSпеременной ), которая по умолчанию является новой строкой (NL ), поэтому вы получаете две строки вывода.

В качестве альтернативы вы можете использовать это, которое имеет только один оператор awk, содержащий только один оператор print, поэтому только один завершающий NL:

`date +'%b' | awk '{ print "Left", $1, "Right" }'
4
27.01.2020, 21:07

Теги

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