Inicialmente, estou produzindo dois arquivos que contêm listas de URLs - os referirei como old
e new
. Gostaria de comparar os dois arquivos e, se houver algum URL no new
arquivo que não esteja no old
arquivo, gostaria que eles fossem exibidos em um extra_urls
arquivo.
Agora, eu li algumas coisas sobre o uso do diff
comando, mas pelo que sei, isso também analisa a ordem das informações. Não quero que a ordem tenha nenhum efeito na saída. Eu só quero que os URLs extras sejam new
impressos no extra_urls
arquivo, independentemente da ordem em que eles são colocados nos outros dois arquivos.
Como posso fazer isso?
fonte
diff
fará a mesma coisa, certo?diff
mostrará todas as diferenças.comm
permite que você selecione se deseja ver as linhas do arquivo 1, arquivo 2 ou as que têm em comum.bash
está sendo executada? Pode não suportar a substituição do processo.Eu usaria apenas
grep
:Explicação
-f
: dizgrep
para ler seus padrões de pesquisa de um arquivo. Nesse casoold
,.-v
: diz ao grep para inverter a correspondência, para imprimir apenas linhas não correspondentes.-F
: diz ao grep para interpretar seus padrões de pesquisa como strings, não como expressões regulares. Dessa forma, o.
URL será correspondido literalmente.Combinadas, elas
grep
imprimem as linhasnew
que não estavamold
. A ordem dos URLs no arquivo é irrelevante.fonte
-F
padrões de texto simplesComo a ordem é importante para você, use
awk
fonte
> extra
para| sort > extra
. ou| sort -u > extra
se você deseja que apenas um novo URL apareça na saída uma vez, independentemente de quantas vezes ele esteja na entrada. A ordem de entrada pode afetar a ordem de saída, a menos que você faça um trabalho extra em algum lugar ao longo do caminho para evitá-la.comm
é a melhor resposta para esta pergunta, emboragrep -Fvf
é muito bomEu tenho um aplicativo chamado meld. Permite visualizar os dois (ou três) arquivos, lado a lado, mostra as diferenças e permite a cópia seletiva de um para o outro ou a exclusão de caracteres.
O Meld pode ser instalado a partir de um terminal com
fonte