Por que usar bash ? O comando grep pode limpar o trabalho.
grep -Fxvf target.txt source.txt #>> target.txt
Isto irá retornar as linhas que existem somente em source.txt , então você pode anexar estas linhas ao seu target.txt apenas com o descompasso #>> target.txt .
Você também pode precisar do source.txt antes, para evitar acrescentar entradas duplicadas se no arquivo source.txt , o qual awk também faz o mesmo na próxima .
grep -Fxvf target.txt <(sort -u source.txt) #>> target.txt
- A opção
-Finforma agrepque corresponde ao padrão como uma string em vez de regex. - Com a opção
-x, estamos dizendo que linha inteira é meu padrão. - O
-vé a correspondência inversa que, se você errar, produzirá as linhas que existem nos dois arquivos. - E
-festá informandogrepler meus padrões de um arquivo que étarget.txtaqui.
Ou você pode usar awk .
awk 'NR==FNR{seen[$0]=1;next} !seen[$0]++' target.txt source.txt #>> target.txt
-
Adicione todo o arquivo target.txt na matriz chamada
seencom a chave da linha inteiraseen[$0]e façanextpara ler a próxima linha. -
Com
!seen[$0]++, estamos procurando uma linha de source.txt que não existe na matriz e, em seguida, imprima-a. Além disso, inclua linhas de arquivos source.txt na matriz para evitar a impressão de linhas duplicadas, se existirem no source.txt_.