file1 gato
foo
ice
two
file2 gato
bar
cream
hundred
Saída desejada:
foobar
icecream
twohundred
arquivo1 e arquivo2 sempre terão a mesma quantidade de linhas no meu cenário, caso isso facilite as coisas.
A ferramenta certa para este trabalho é provavelmente paste
paste -d '' file1 file2
Veja man paste
para detalhes.
Você também pode usar o pr
comando:
pr -TmJS"" file1 file2
Onde
-T
desativa a paginação-mJ
m ficheiros Erge, J linhas cheias oining-S""
separar as colunas com uma sequência vazia Se você realmente queria fazer isso usando o shell bash puro (não recomendado), é o que eu sugeriria:
while IFS= read -u3 -r a && IFS= read -u4 -r b; do
printf '%s%s\n' "$a" "$b"
done 3<file1 4<file2
(Somente incluindo isso porque o assunto surgiu nos comentários de outra solução de purificação de massa proposta).
Através da maneira awk :
getline x<"file2"
lê a linha inteira do arquivo2 e mantém a variável x .print $0x
imprime a linha inteira do arquivo1 usando$0
entãox
qual é a linha salva do arquivo2 .fonte
paste
é o caminho a percorrer . Se você quiser verificar alguns outros métodos, aqui está umapython
solução:Se você tiver pouco número de linhas:
Observe que, para um número desigual de linhas, este terminará na última linha do arquivo que termina primeiro.
fonte
Além disso, com pure
bash
(observe que isso ignorará totalmente as linhas vazias):fonte
mapfile
para ler os arquivos em matrizes ou use um loop while com doisread
comandos, lendo cada um deles.array=( $(cmd) )
ouarray=( $var )
. Use emmapfile
vez disso.O jeito perl, fácil de entender:
Começar com:
Saída:
fonte