Думаю, многие люди задают этот вопрос, пытаясь избежать появления новой строки в awk
. Таким образом, я собираюсь предложить решение именно этого, поскольку ответ на конкретный контекст уже был решен!
В awk
, print
автоматически вставляет ORS
после печати. ORS
означает «разделитель выходной записи» и по умолчанию используется новая строка. Поэтому всякий раз, когда вы говорите print "hi"
, awk печатает "привет" + новую строку.
Это можно изменить двумя способами: с помощью пустого ORS
или с помощью printf
.
Используя пустой ORS
awk -v ORS= '1' <<< "hello
man"
Это возвращает "хелломана", все вместе.
Проблема здесь в том, что не все awks принимают установку пустого ORS
, поэтому вам, вероятно, придется установить другой разделитель записей.
awk -v ORS="-" '{print ...}' file
Например:
awk -v ORS="-" '1' <<< "hello
man"
Возвращает "hello-man-".
Использование printf
(предпочтительно)
В то время как print
присоединяет ORS
после записи, printf
нет. Таким образом, printf "hello"
просто печатает «привет», больше ничего.
$ awk 'BEGIN{print "hello"; print "bye"}'
hello
bye
$ awk 'BEGIN{printf "hello"; printf "bye"}'
hellobye
Наконец, обратите внимание, что в общем случае пропускается последняя новая строка, так что приглашение оболочки будет в той же строке, что и последняя строка вывода. Чтобы очистить это, используйте END {print ""}
, чтобы после всей обработки печаталась новая строка.
$ seq 5 | awk '{printf "%s", $0}'
12345$
# ^ prompt here
$ seq 5 | awk '{printf "%s", $0} END {print ""}'
12345
person
fedorqui 'SO stop harming'
schedule
09.04.2015