Как объединить многострочный вывод в одну строку?

Я хочу объединить разные выходные данные строки в одну строку, как показано ниже.

$ cat new.txt | grep Full |  awk '{print }' 
09/01/2018
08/25/2018
08/18/2018
08/11/2018
08/04/2018
07/28/2018
07/21/2018

Я хочу объединить выше вывода в одну строку, например

09/01/2018,08/25/2018

etc.

21
задан Kamil Maciorowski
17.11.2022 14:14 Количество просмотров материала 3383
Распечатать страницу

2 ответа

tr '\n' ',' | sed 's/,$/\n/'

tr заменяет каждый символ новой строки на ,, включая самый последний (после 07/21/2018). Тогда sed заменяет , В конце с новой строкой, чтобы сформировать POSIX-совместимую строку без трейлинга ,.

обратите внимание sed инструмент обработки текста, который по умолчанию работает с одной линией одновременно. Что бы ни оставалось tr - это одна строка; она может быть очень длинной, в зависимости от вашего ввода, и sed не может быть лучшим инструментом для обработки она.

я бы пересмотрел идею наличия всех результатов в одной строке, чтобы избежать такого сценария. Есть способы заменить именно этот sed С инструментом, работающим с байтами (не строками). Но даже если вы сделаете это здесь, у вас все равно будет потенциально очень длинная строка, которую неудобно анализировать позже.

OK, если вам действительно нужно это сделать, используйте следующую команду для создания произвольно большой строки. Все парсинг сделано с инструментами работая дальше байты:

head -c -1 | tr '\n' ',' && printf '\n'

head удаляет последний символ, мы слепо предполагаем, что это новая строка;tr изменения всех остальных строк в , символы; printf добавляет завершающую новую строку, чтобы сделать ваш результат POSIX-совместимой линией.

1
отвечен Kamil Maciorowski 2022-11-18 22:02

вы хотите paste.

cat new.txt | grep Full |  awk '{print }' | paste -s -d,

кроме того, awk может делать то, что могут делать и кошка, и греп, так

awk '/Full/ {print }' new.txt | paste -s -d,

кроме того, awk может форматировать его вывод, но он менее читаем:

awk '/Full/ {printf "%s%s", (NR == 1 ? "" : ","), } END {print ""}' new.txt
2
отвечен glenn jackman 2022-11-19 00:19

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх