Usa semplicemente cat
(se ti piacciono i gatti ;-)) e paste
:
cat file.in | paste -d, - - > file.out
Spiegazione: paste
legge da un numero di file e incolla le righe corrispondenti (riga 1 dal primo file con riga 1 dal secondo file ecc.):
paste file1 file2 ...
Invece di un nome di file, possiamo usare -
(trattino). paste
prende la prima riga da file1 (che è stdin). Quindi, vuole leggere la prima riga da file2 (che è anche stdin). Tuttavia, poiché la prima riga di stdin era già stata letta ed elaborata, ciò che ora attende sul flusso di input è la seconda riga di stdin, che paste
si incolla felicemente sulla prima. L' -d
opzione imposta il delimitatore come una virgola anziché una scheda.
In alternativa, fallo
cat file.in | sed "N;s/\n/,/" > file.out
PS Sì, si può semplificare quanto sopra
< file.in sed "N;s/\n/,/" > file.out
o
< file.in paste -d, - - > file.out
che ha il vantaggio di non usare cat
.
Tuttavia, non ho usato questo idioma di proposito , per motivi di chiarezza - è meno prolisso e mi piace cat
(I GATTI SONO PIACEVOLI). Quindi per favore non modificare.
In alternativa, se si preferisce incollare ai gatti (paste è il comando per concatenare i file in orizzontale, mentre cat li concatena in verticale), è possibile utilizzare:
paste file.in | paste -d, - -