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