Una leggera variazione sulla risposta di Glenn Jackman utilizzando paste
: se il valore -d
dell'opzione delimitatore contiene più di un carattere, paste
scorre i caratteri uno alla volta e, combinato con le -s
opzioni, continua a farlo mentre elabora lo stesso file di input.
Ciò significa che possiamo usare tutto ciò che vogliamo avere come separatore più la sequenza di escape \n
per unire due linee alla volta.
Usando una virgola:
$ 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 il simbolo del dollaro:
$ 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
Ciò che questo non può fare è utilizzare un separatore composto da più caratteri.
Come bonus, se paste
è conforme a POSIX, questo non modificherà la nuova riga dell'ultima riga nel file, quindi per un file di input con un numero dispari di righe come
KEY 4048:1736 string
3
KEY 0:1772 string
paste
non attaccherà il carattere di separazione sull'ultima riga:
$ paste -s -d ',\n' infile
KEY 4048:1736 string,3
KEY 0:1772 string
pr
,paste
,awk
,xargs
,sed
epure bash
! (xargs
è il più lento, più lento del bash !)