Небольшое изменение в ответе Гленна Джекмана с использованием paste
: если значение для параметра -d
разделителя содержит более одного символа, paste
циклически перебирает символы по одному и в сочетании с -s
параметрами продолжает делать это при обработке одного и того же входного файла.
Это означает, что мы можем использовать все, что хотим, в качестве разделителя плюс escape-последовательность \n
для объединения двух строк одновременно.
Используя запятую:
$ paste -s -d ',\n' infile
KEY 4048:1736 string,3
KEY 0:1772 string,1
KEY 4192:1349 string,1
KEY 7329:2407 string,2
KEY 0:1774 string,1
и знак доллара:
$ paste -s -d '$\n' infile
KEY 4048:1736 string$3
KEY 0:1772 string$1
KEY 4192:1349 string$1
KEY 7329:2407 string$2
KEY 0:1774 string$1
Чего нельзя сделать, так это использовать разделитель, состоящий из нескольких символов.
В качестве бонуса, если paste
он совместим с POSIX, это не приведет к изменению новой строки последней строки в файле, поэтому для входного файла с нечетным числом строк, например
KEY 4048:1736 string
3
KEY 0:1772 string
paste
не будет привязываться к символу разделения в последней строке:
$ paste -s -d ',\n' infile
KEY 4048:1736 string,3
KEY 0:1772 string
pr
,paste
,awk
,xargs
,sed
иpure bash
! (xargs
медленнее, медленнее, чем Баш !)