paste
é provavelmente o mais fácil (que, para não mencionar, extremamente eficiente) significa à sua disposição para lidar com esse problema.
printf abc >file1
printf def >file2
paste -sd\n file[12]
abc
def
Quando paste
é invocado -s
erialmente, ele lerá cada um de seus arquivos de entrada nomeados por vez e paste
da saída de cada linha dentro de cada arquivo em uma guia < tab > ou uma string% elimiter -d
especificada. Enquanto paste
sempre terminará sua saída de cada infile nomeado com um \n
ewline, aqui o -d
elimiter também é especificado para ser um \n
ewline e, portanto, será basicamente cat
sua entrada para a saída com a exceção de que cada arquivo sempre terminará em \n
ewline.
Como Peter aponta abaixo, um arquivo vazio pode fazer com que paste
emita um extra \n
ewline. Se isso for um problema, praticamente o mesmo método pode ser aplicado com sed
, o que não será :
: > file0
sed '' file[012]
abc
def
Agora com este método, (com GNU sed
pelo menos) pode haver um problema diferente. Qualquer sed
irá sempre escrever um \n
ewline antes de puxar outra linha, mas se for a muito última linha de toda a série concatenada de arquivos de entrada, então alguns sed
s (como o GNU) podem não anexar uma nova linha no final. Por exemplo, com meus arquivos de entrada, o def não é seguido por uma nova linha.
E se isso é um problema, bem ...
sed '' file[012] | paste -sd\n
... o canal acima provavelmente deve cobrir todas as suas bases.