Я предполагаю, что многие люди входят в этот вопрос, ища способ избежать новой линии в awk. Таким образом, я собираюсь предложить решение именно этого, так как ответ на конкретный контекст уже был решен!
В awk, printавтоматически вставляет ORSпосле печати. ORSрасшифровывается как «разделитель выходных записей» и по умолчанию соответствует новой строке. Поэтому всякий раз, когда вы говорите, print "hi"awk печатает «привет» + новая строка.
Это может быть изменено двумя различными способами: используя пустой ORSили используя printf.
Используя пустой ORS
awk -v ORS= '1' <<< "hello
man"
Это возвращает "helloman", все вместе.
Проблема здесь заключается в том, что не все awk допускают установку пустого значения ORS, поэтому вам, вероятно, придется установить другой разделитель записей.
awk -v ORS="-" '{print ...}' file
Например:
awk -v ORS="-" '1' <<< "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
printfтрактует%sтак использоватьprintf "%s" whateverвместоprintf whatever.