Diferença exata entre dados de linhas em dois arquivos no Linux

0

Precisa de uma saída exata de diferença entre dois arquivos. Os dados estavam em linhas separadas por vírgula e havia um número de linhas, por exemplo, mostrei apenas uma linha. Cada string deve procurar cada string em outro arquivo.

exemplo:

arquivo1.txt

abc,def,ghi,klm,nop
one,two,three,four,five,six

arquivo2.txt

abc,def,ghi,klm,nop
one,two,three,test,four,five,six

resultado esperado:

test
    
por sam 05.05.2017 / 05:16

2 respostas

2

Python abordagem com difflib (ajudantes para deltas computacionais) e sys :

differ.py :

import difflib, sys

with open(sys.argv[1], 'r') as f1, open(sys.argv[2], 'r') as f2:
    differ = difflib.Differ()
    for l in differ.compare(f1.read().split(','), f2.read().split(',')):
        if (l.startswith('+ ') or l.startswith('- ')):
            sys.stdout.write(l[2:] + '\n')

Uso:

python differ.py file1.txt file2.txt

A saída:

test

difflib.Differ - uma classe para comparar sequências de linhas de texto e produzir diferenças ou deltas legíveis por humanos

    
por 05.05.2017 / 09:36
0

A abordagem clássica do gnu awk em todos os tempos:

awk -v RS=",|\n" 'NR==FNR{seen[$0]++;next}!seen[$0]' file1 file2 
test

Isso funciona porque estamos usando também vírgula como awk line / record separator (RS), e assim obtemos uma saída como essa para cada arquivo:

awk -v RS=",|\n" '{print $0}' file1
abc
def
ghi
klm
nop
one
two
three
four
five
six
    
por 05.05.2017 / 11:26