Uma ligeira variação na resposta de glenn jackman usando paste
: se o valor da -d
opção delimitador contém mais de um caractere, paste
alterna entre os caracteres um por um e, combinado com as -s
opções, continua fazendo isso enquanto processa o mesmo arquivo de entrada.
Isso significa que podemos usar o que quisermos como separador mais a sequência de escape \n
para mesclar duas linhas por vez.
Usando uma vírgula:
$ 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
e o cifrão:
$ 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
O que isso não pode fazer é usar um separador que consiste em vários caracteres.
Como um bônus, se o paste
for compatível com POSIX, isso não modificará a nova linha da última linha no arquivo, portanto, para um arquivo de entrada com um número ímpar de linhas como
KEY 4048:1736 string
3
KEY 0:1772 string
paste
não adicionará o caractere de separação na última linha:
$ paste -s -d ',\n' infile
KEY 4048:1736 string,3
KEY 0:1772 string
pr
,paste
,awk
,xargs
,sed
epure bash
! (xargs
é o mais lento, mais lento que o bash !)