Небольшое отклонение ответа Гленна Джекмана с использованием 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