Вывести несколько строк как одну строку с разделителем строк - PullRequest
2 голосов
/ 21 апреля 2020

У меня есть файл, где каждая строка содержит строку, например:

Jane
Sally
John
Jim

Я хотел бы переформатировать мой файл так, чтобы каждая строка была объединена в одну строку с новой строкой, разделяющей каждый оригинал строка, например:

JaneNNNNNSallyNNNNNJohnNNNNNJim

Я могу объединить свой многострочный формат в однострочный формат, используя cat или paste, например:

cat file.txt | tr -s '\n' 'NNNNN'
paste -sd 'NNNNN' file.txt

Но они включают только один 'N 'как заполнение между строками, как это:

JaneNSallyNJohnNJim

Как я могу дополнить строкой из нескольких символов? Возможно, sed будет более эффективным?

Ответы [ 3 ]

5 голосов
/ 21 апреля 2020

Использование любого awk в любой оболочке на каждом поле UNIX и чтение только одной строки за раз в памяти (в отличие, скажем, от всего файла):

$ awk '{printf "%s%s", ors, $0; ors="NNNNN"} END{print ""}' file
JaneNNNNNSallyNNNNNJohnNNNNNJim
5 голосов
/ 21 апреля 2020

С GNU awk:

awk '$1=$1' OFS='NNNNN' RS='' file

Обновление с Примечание Эда ниже :

awk '{$1=$1}1' OFS='NNNNN' RS='' file

Вывод:

JaneNNNNNSallyNNNNNJohnNNNNNJim

См .: 8 Мощные встроенные переменные Awk - FS, OFS, RS, ORS, NR, NF, FILENAME, FNR

2 голосов
/ 21 апреля 2020

Это может работать для вас (GNU sed):

sed ':a;N;$!ba;s/\n/NNNNN/g' file

Перетянуть файл в память и заменить каждую новую строку на NNNNN.

Конечно, вы можете использовать:

paste -s file | sed 's/\t/NNNNN/g'

Или:

printf "%sNNNNNN" $(<file) | sed 's/NNNNN$/\n/'

NB Последнее решение не будет работать с несколькими словами в строке.

...