Como posso gerar a diferença entre 2 arquivos?


11

Meu arquivo consiste no seguinte; aproximadamente:

username:username:username:username:username 

A linha acima continua com cerca de 600 caracteres.

Eu uso o awkcomando para usá-lo como argumento em uma solicitação de API / HTTP enviada da linha de comando.

Estou usando meu script para obter uma lista de contas de usuário 'me seguindo', e a cada 24 horas aproximadamente, comparando a lista original no meu disco rígido com a lista de nome de usuário recém- gerada (e ecoando quem não está mais seguindo me . I terá para encapsular a minha lógica em um loop usando bash .. testando cada nome de usuário.

Meu script atual:

user=$(awk -F: '{ print $1 }' FILE)  # Grab $User to use as an argument.  
following=$(exec CURRENT_FOLLOWERS) # Outputs the new file

echo "X amount of users are following you on 78B066B87AF16A412556458AC85EFEF66155"  

          SAVE CURRENT FOLLOWERS TO NEW A FILE.  


if [[ DIFFERENCE IS DETECTED ]] ; then    

          echo -ne "$User NO LONGER FOLLOWING YOU\r"

   else echo -ne "This user is following you still.\r"
fi

Minha pergunta é;
Como posso gerar a diferença entre 2 arquivos?


Você sabe diff, certo?
schaiba

@schaiba Obrigado. Só me deparei com isso em outro fórum, funciona muito bem. Eu não tinha tropeçado antes disso. Espero que esta resposta seja útil para consultas futuras de outros membros.
Ben

O @schaiba também pode responder. Certifique-se de lidar com o diff trabalhando nas linhas e não nos campos.
terdon

Respostas:



13

Dados dois arquivos contendo listas de usuários não ordenadas, por exemplo

In file1:
    userD
    user3
    userA
    user1
    userB

e

In file2:
    user3
    userB
    userX
    user1

para obter uma lista simples dos usuários, file1mas não o faça file2, você pode fazer

$ comm -23 <(sort file1) <(sort file2)
userA
userD

e da mesma forma para atrair usuários, file2mas nãofile1

$ comm -13 <(sort file1) <(sort file2)
userX

Se os arquivos da lista já estiverem classificados, eles poderão ser simplificados para comm -23 file1 file2e comm -13 file1 file2respectivamente.


1
É possível usar commsem classificar? Meu arquivo de texto tem valores como 1, 2, 01, 02, 0000, 0001, 0002, etc. Usando sortvai de-espécie da ordem ...
Lanti

6

O melhor comando para visualizar a diferença no conteúdo dos arquivos seria

vim -d file1 file2

3

diff [options] from-file to-file

diffcompara o conteúdo dos dois arquivos de arquivo e arquivo. Você pode especificar a -iopção que ignora as alterações caso; considere letras maiúsculas e minúsculas equivalentes.

Para mais informações, consulte este link: http://www.computerhope.com/unix/udiff.htm ou consulte a página do manual.


2

você pode tentar as mesmas janelas como fccomando no Unix e Linux ie diff <file_new> <file_old>comando.

A linha com +++ou ---na frente deles mudou e uma sem +'se -'snão mudou

Linhas com -sinal são removidas do novo arquivo, no entanto, elas existiam na versão antiga

Linhas com +sinal são adicionadas em um novo arquivo, no entanto, não existiam na versão antiga do arquivo

Notação Linux

O Linux usa > e<

>significa a linha do arquivo antigo <significa a linha do novo arquivo que é alterada no arquivo antigo


0

Vá para vimdiff em Mostrando diferenças entre duas, três ou quatro versões do mesmo arquivo.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.