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
-F
informa agrep
que 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
-f
está informandogrep
ler meus padrões de um arquivo que étarget.txt
aqui.
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
seen
com a chave da linha inteiraseen[$0]
e façanext
para 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_.