Use grep
e não é necessário classificá-los:
grep -Fxvf file2 file1 > diff_file
retornará linhas que estão em arquivo1 , mas não em arquivo2 (linhas perdidas em arquivo2 ).
Eu tenho dois arquivos contendo uma lista de todos os caminhos de arquivos de dois discos rígidos (supostamente exatamente iguais), um dos quais eu acho que faltam arquivos. Ambas as listas têm o caminho e o tamanho do arquivo, mas as listas não estão na mesma ordem (veja o exemplo abaixo).
Existe um comando que pode comparar a diferença entre os dois arquivos e gerar a diferença para um novo arquivo?
Exemplo:
arquivo1:
/docs/red
/docs/blue
/docs/yellow
/docs/green
arquivo_2:
/docs/blue
/docs/green
/docs/red
Arquivo_de_diferença:
/docs/yellow
Use grep
e não é necessário classificá-los:
grep -Fxvf file2 file1 > diff_file
retornará linhas que estão em arquivo1 , mas não em arquivo2 (linhas perdidas em arquivo2 ).
Eu tentaria usar o sort e diff:
$ diff <(sort csv1.txt) <(sort csv2.txt)
4d3
<
8d6
< /docs/yellow
Eu geralmente uso o meld (que é uma ferramenta de comparação visual muito útil) para tais comparações.
Instalar o meld:
sudo apt-get install meld
Classifique e compare:
sort csv1.txt > csv1-sorted.txt
sort csv2.txt > csv2-sorted.txt
meld csv1-sorted.txt csv2-sorted.txt
O comando comm
foi projetado para responder a esse tipo de pergunta. O que ele faz é obter dois arquivos classificados como entrada e, em seguida, gerar três colunas de texto: linhas exclusivas para arquivo1, linhas exclusivas para arquivo2 e linhas comuns nos dois arquivos. Você pode suprimir qualquer uma dessas três colunas.
No seu caso, você gostaria de algo como:
comm <(sort file1) <(sort file_2) -3 --output-delimiter=''
O qual irá comparar file1
e file_2
e, em seguida, exibirá quaisquer diferenças existentes na saída padrão. Use -23
(suprima as colunas 2 e 3) se você quiser apenas as linhas exclusivas para file1
ou -13
(suprima as colunas 1 e 3) se desejar apenas as linhas exclusivas para file_2
Se a sua verdadeira questão é como comparar dois sistemas de arquivos montados, eu usaria rsync
.
Veja: Rsync compara diretórios? no Unix & Linux
Você pode usar -n
( --dry-run
) para fazer com que nenhum arquivo seja realmente copiado e, em seguida, a saída são as diferenças. Isso, por padrão, também mostrará se um arquivo é mais novo que outro, ou seja, se o conteúdo foi alterado. Estou bastante confiante de que pode ser configurado para ignorar o conteúdo do arquivo.