Bash Script para mostrar a diferença entre dois arquivos de texto

4

Digamos que eu tenha duas listas:

guests-2016.txt :

Peter
Michael
Frank
Dirk

guests-2017.txt :

Mark
Michael
Dirk
Lilly

Como posso criar duas novas listas de convidados

  1. Os convidados que estavam em guests-2016.txt , mas não estão em guests-2017.txt ( former_guests.txt )

  2. Os convidados que não estavam em guests-2016.txt , mas estão em guests-2017.txt now ( new_guests.txt )

Linhas em branco devem ser ignoradas. Somente utilitários padrão devem ser usados.

Minha ideia seria usar diff e fazer um pós-processamento.

    
por NoobieNoob 26.09.2017 / 21:07

2 respostas

3

Dados dois arquivos classificados , comm faria isso por você.

Veja as combinações das opções de linha de comando -2 -3 e -1 -3 , por exemplo.

    
por 26.09.2017 / 21:25
1

Verifique, isso faz o trabalho. Eu posso adicionar uma explicação, se você for necessário.

awk '
/^$/{next}
FNR == NR {guest_2016[$1] = 1}
FNR != NR {
    if(!guest_2016[$1])
        print $1 > "new_guests.txt" 
    delete guest_2016[$1];
}
END {
    for(i in guest_2016)
        print i > "former_guests.txt"
}' guests-2016.txt guests-2017.txt
    
por 26.09.2017 / 22:41