A esponja
sugerida em outra resposta é a ferramenta certa para o trabalho!
sudo yum install moreutils
paste first.xls second.xls | sponge first.xls
Este comando bash usando tee funciona para arquivos pequenos (< 2048 linhas):
CUIDADO: esse hack não funciona para arquivos maiores.
paste first.xls second.xls | tee first.xls >/dev/null
first.x second. result
1 2 1 2
1 2 1 2
1 2 1 2
Este comando executa a colagem em dois arquivos e depois canaliza para 'tee'. O comando tee RE-ABRE o arquivo (e stdout) para write . Então funciona. . mas é um pouco um hack. . funcionará em todos os sistemas? isso também funciona para arquivos grandes?
Veja aqui não exatamente a mesma pergunta, mas relevante:
link
Seu problema é que seu comando abre primeiro.xls para escrever (anexar) e ler simultaneamente. Os dados são lidos do arquivo (depois combinados com colar com outro arquivo). Os dados de saída são então gravados (anexados) no arquivo. Os dados recém-gravados são lidos de volta, resultando no acréscimo - como seria de se esperar. Seu comando de acréscimo:
paste first.xls second.xls >> first.xls
first.x second. result
1 2 1
1 2 1
1 2 1
1 2
1 2
1 2
Alterar o redirecionamento para abrir para sobrescrever também não funciona. Isso resulta no primeiro.xls sendo aberto e apagado antes de ser lido. E você recebe uma coluna em branco + 2 colunas. Substituir em vez de anexar não funciona de maneira diferente:
paste first.xls second.xls > first.xls
first.x second. result
1 2 2
1 2 2
1 2 2
TESTANDO arquivos maiores
1000 linhas que funcionam:
yes "1" | fmt -2 |head -1000 >1000.1
yes "2" | fmt -2 |head -1000 >1000.2
paste 1000.1 1000.2 |tee 1000.1 >/dev/null
uniq -c 1000.1
1000 1 2
10000 linhas começamos a ver um problema semelhante novamente :
Interessante vermos depois de 2048 linhas :-) A adivinhação é causada pelo limite do buffer de disco ou talvez pelo limite do buffer de tubo. . .
yes "1" | fmt -2 |head -10000 >10000.1
yes "2" | fmt -2 |head -10000 >10000.2
paste 10000.1 10000.2 |tee 10000.1 >/dev/null
uniq -c 10000.1
2048 1 2
7952 2