Uma solução geral do Linux é: -
E1=""; E2=""
{ while true
do read -r <&3 && l1="$REPLY" || l1="" E1=e
read -r <&4 && l2="$REPLY" || l2="" E2=e
[ "$E1$E2" == ee ] && break
echo "$l1$l2"
done
} 3<"$1" 4<"$2"
Formatei isso como um script de legibilidade, mas ele pode ser inserido como uma linha de comando longa substituindo as novas linhas por ponto-e-vírgula e substituindo $1
e $2
pelos caminhos dos arquivos para ser fundido.
Isso funciona da seguinte maneira: -
-
E1
e E2
são sinalizadores de fim de arquivo;
- Dois fluxos de entrada (3 e 4) são abertos a partir dos dois caminhos de arquivos transmitidos;
- Uma linha é lida de cada arquivo e definida nas variáveis
l1
e l2
respectivamente;
- Observe que
read -r l1
remove espaços em branco iniciais e finais, portanto, o código mais complexo para definir l1
(e l2
);
- O loop termina quando ambos os arquivos alcançam o EOF, embora seja uma modificação trivial terminar em um dos arquivos que atinge o EOF;
- O
echo
será padronizado ou >"$3"
poderá ser adicionado à linha, tornando o arquivo de saída o terceiro parâmetro;
- O comando
echo
pode ser estendido se você quiser adicionar uma string delimitadora para separar o texto de cada arquivo.
O script acima deve funcionar no WSL (Windows Subsystem para Linux) no Windows 10 ou no CygWin em versões anteriores do Windows.
Seria possível implementar em cmd
, mas eu não gostaria de tentar, embora seja simples no freeware de substituição cmd
aprimorado TCC / LE . Também deve ser possível com o PowerShell, mas não tenho muita experiência nisso, já que uso principalmente o Linux.