Точная разница между данными строк в двух файлах в Linux

Требуется точный вывод разницы между двумя файлами. Данные были в строках, разделенных запятыми, и было количество строк, например, я показал вам только одну строку. Каждая строка должна искать каждую строку в другом файле.

пример:

file1.txt

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

file2.txt

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

ожидаемый результат:

test
0
05.05.2017, 06:28
2 ответа

Всемирный классический подход gnu awk:

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

Это работает, потому что мы также используем запятую в качестве разделителя строк/записей awk (RS), и, таким образом, мы получаем следующий вывод для каждого файла:

awk -v RS=",|\n" '{print $0}' file1
abc
def
ghi
klm
nop
one
two
three
four
five
six
0
28.01.2020, 02:33

Python подход с difflib (помощники для вычисления дельт) и sys модули:

Different.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')

Использование:

python differ.py file1.txt file2.txt

Вывод:

test

difflib.Differ — класс для сравнения последовательностей строк текста и создания удобочитаемых различий или дельт

.
2
28.01.2020, 02:33

Теги

Похожие вопросы