Use o comando paste :
paste -d '' File1 File2
Por padrão, paste une as linhas às guias, portanto, precisamos usar a opção -d para dizer a ela para usar a string vazia para ingressar.
De um determinado número de arquivos, eu preciso criar um novo arquivo onde cada linha de texto é a seqüência das respectivas linhas dos meus arquivos originais. Então, digamos que eu tenha dois arquivos com uma estrutura como esta:
Arquivo1:
AAAA
BBBB
CCCC
Arquivo2:
XXXX
YYYY
ZZZZ
Eu preciso combiná-los para obter um resultado como:
AAAAXXXX
BBBBYYYY
CCCCZZZZ
Como posso fazer isso a partir de um script bash?
Através do método awk :
awk '{getline x<"file2"; print $0x}' file1
getline x<"file2" lê a linha inteira de arquivo2 e mantém a variável x . print $0x imprime a linha inteira de arquivo1 usando $0 , em seguida, x , que é a linha salva de arquivo2 . paste é o caminho a percorrer, mas por uma questão de perfeição, aqui está uma solução focada em bash (com pouca ajuda de seq e wc ):
for _ in $(seq 1 $(wc -l <f1.txt)); do \
read -u 3 one; read -u 4 two; echo "${one}${two}"; done 3<f1.txt 4<f2.txt
Aqui estamos enviando o conteúdo dos arquivos f1.txt e f2.txt através dos descritores de arquivos 3 e 4. read dos respectivos FDs, e echo imprime a saída no formato desejado.
A iteração irá parar após o f1.txt terminar, aqui _ é uma variável descartável.
Melhor, apenas bash , dependendo do status de saída de read quando o EOF é alcançado, com uma construção while (graças a steeldriver ):
while IFS= read -ru3 one && IFS= read -ru4 two; do echo "${one}${two}"; done 3<f1.txt 4<f2.txt
Exemplo:
$ cat f1.txt
AAAA
BBBB
CCCC
$ cat f2.txt
XXXX
YYYY
ZZZZ
$ for _ in $(seq 1 $(wc -l <f1.txt)); do read -u 3 one; read -u 4 two; echo "${one}${two}"; done 3<f1.txt 4<f2.txt
AAAAXXXX
BBBBYYYY
CCCCZZZZ
$ while IFS= read -ru3 one && IFS= read -ru4 two; do echo "${one}${two}"; done 3<f1.txt 4<f2.txt
AAAAXXXX
BBBBYYYY
CCCCZZZZ
Tags command-line bash scripts