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