Una ligera variación en la respuesta de glenn jackman usando paste
: si el valor de la -d
opción delimitador contiene más de un carácter, paste
recorre los caracteres uno por uno, y combinado con las -s
opciones sigue haciéndolo mientras procesa el mismo archivo de entrada.
Esto significa que podemos usar lo que queramos tener como separador más la secuencia de escape \n
para fusionar dos líneas a la vez.
Usando una coma:
$ 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
y el signo de dólar:
$ 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
Lo que esto no puede hacer es usar un separador que consta de varios caracteres.
Como paste
beneficio adicional, si es compatible con POSIX, esto no modificará la nueva línea de la última línea del archivo, por lo que para un archivo de entrada con un número impar de líneas como
KEY 4048:1736 string
3
KEY 0:1772 string
paste
no agregará el carácter de separación en la última línea:
$ paste -s -d ',\n' infile
KEY 4048:1736 string,3
KEY 0:1772 string
pr
,paste
,awk
,xargs
,sed
ypure bash
! (xargs
es el más lento, más lento que bash !)