Dados dois arquivos, quero escrever um script de shell que leia cada linha do arquivo1 e verifique se existe no arquivo2. Se uma linha não for encontrada, ela deverá gerar dois arquivos diferentes e sair. Os arquivos podem conter números de palavras ou qualquer coisa. Por exemplo :
file1:
Hi!
1234
5678
1111
hello
arquivo2:
1111
5678
1234
Hi!
hello
Nesse caso, dois arquivos devem ser iguais. se o arquivo2 tiver "olá !!!" em vez de "olá", os arquivos são diferentes. Estou usando o script bash. Como posso fazer isso. Não é importante que eu precise fazer isso em um loop aninhado, mas foi o que pensei ser o único caminho. Obrigado pela ajuda.
sort
não se importa com o conteúdo exato, a menos que você o solicite.--brief
e adicione opções de formato, por exemplo-u
.diff
define seu status de saída para indicar se os arquivos são iguais ou não. O status de saída está acessível na variável especial$?
. Você pode expandir a resposta de Ignacio desta maneira:fonte
if diff ... >/dev/null
sem os colchetes e a variável.Adicionando isso porque acho que os [[]] && || A construção é bem legal:
fonte
Também deve funcionar:
Eu acho que isso é caracteres suficientes para uma resposta ...
fonte
Embora
diff
seja uma resposta perfeitamente correta, eu provavelmente usaria, emcmp
vez disso, especificamente para fazer uma comparação de byte a byte de dois arquivos.https://linux.die.net/man/1/cmp
Por esse motivo, possui o bônus adicional de poder comparar arquivos binários.
Sou levado a acreditar que é mais rápido do que usar,
diff
embora não tenha testado isso pessoalmente.fonte