Basta usar cat
(se você gosta de gatos ;-)) e paste
:
cat file.in | paste -d, - - > file.out
Explicação: paste
lê um número de arquivos e cola as linhas correspondentes (linha 1 do primeiro arquivo com a linha 1 do segundo arquivo etc):
paste file1 file2 ...
Em vez de um nome de arquivo, podemos usar -
(traço). paste
recebe a primeira linha do arquivo1 (que é stdin). Então, ele quer ler a primeira linha do arquivo2 (que também é stdin). No entanto, como a primeira linha de stdin já foi lida e processada, o que agora aguarda no fluxo de entrada é a linha segundo do stdin, que paste
colou alegremente no primeiro. A opção -d
define o delimitador como uma vírgula em vez de uma guia.
Alternativamente, faça
cat file.in | sed "N;s/\n/,/" > file.out
P.S. Sim, pode-se simplificar o acima para
< file.in sed "N;s/\n/,/" > file.out
ou
< file.in paste -d, - - > file.out
que tem a vantagem de não usar cat
.
No entanto, eu não usei esse idioma de propósito , por motivos de clareza - é menos detalhado e eu gosto de cat
(CATS ARE NICE). Então, por favor, não edite.
Como alternativa, se você preferir colar a gatos (colar é o comando para concatenar arquivos horizontalmente, enquanto o gato concatena na vertical), você pode usar:
paste file.in | paste -d, - -