Сравнение двух файлов и запись несовпадающих строк и несовпадающих столбцов. Указание на несовпадающие столбцы - это моя основная постановка проблемы

Проблема заключалась в виртуальном сетевом интерфейсе ( virbr0 ). Samba выбрала это как предпочтительный интерфейс, который указывал на недопустимый широковещательный адрес. Я полагаю, поскольку он считал себя единственным работающим там самба-сервером, он установил себя как «локальный главный браузер».

См. Этот отрывок из вывода smbtree -d3 и обратите внимание на третью запись с ошибочным "bcast" "192.168.124.255":

Processing section "[global]"
added interface wlp0s20u6 ip=192.168.1.14 bcast=192.168.1.255 netmask=255.255.255.0
added interface enp3s0 ip=192.168.1.15 bcast=192.168.1.255 netmask=255.255.255.0
added interface virbr0 ip=192.168.124.1 bcast=192.168.124.255 netmask=255.255.255.0

Отключение libvitrd ( systemctl disable libvirtd ) избавился от этого интерфейса, что, похоже, устранило проблему; теперь smbtree показывает другие общие ресурсы в сети.

Перед отключением этого интерфейса, когда я проверял статус nmb.service, я видел сообщение вроде «Сервер имен Samba WOMBAT теперь является локальным главным браузером для HOME рабочей группы в подсети 192.168.124.255». Эта неправильная подсеть привела меня к неправильному интерфейсу; Я видел его адрес при запуске ifconfig .

ПОСЛЕСЛОВИЕ: Я не знаю, как появился этот интерфейс. Если я правильно понял, это виртуальный NAT-интерфейс. На этом компьютере не установлены Virtualbox, VMWare и т. Д.; Я не уверен, что еще могло его включить. Если кому-то интересно, пожалуйста, пролейте свет в комментариях.

2
08.05.2017, 18:19
1 ответ

Python 3.x решение:

diff_marked.py скрипт:

import sys

file1_name = sys.argv[1]
file2_name = sys.argv[2]

with open(file1_name, 'r') as f1, open(file2_name, 'r') as f2:
    f1_lines = f1.readlines()  # list of lines of File1
    f2_lines = f2.readlines()  # list of lines of File2

    for k,l in enumerate(f1_lines):
        f1_fields = l.strip().split('|')  # splitting a line into fields by separator '|'
        if k < len(f2_lines) and f2_lines[k]:
            has_diff = False
            f2_fields = f2_lines[k].strip().split('|')
            for i,f in enumerate(f1_fields):
                if f != f2_fields[i]:    # comparing respective lines 'field-by-field' between two files
                    f1_fields[i] = '**' + f + '**'  # wrapping differing fields
                    f2_fields[i] = '**' + f2_fields[i] + '**'
                    has_diff = True

        if has_diff:
            print(f1.name)  # print file name
            print('|'.join(f1_fields))
            print(f2.name)
            print('|'.join(f2_fields))

Использование: (у вас может быть другая версия Python, текущий случай был протестирован на python 3.5)

python3.5 diff_marked.py File1 File2 > diff_output

diff_output content:

File1
1|piyush|bangalore|**dev**
File2
1|piyush|bangalore|**QA**
File1
3|rohit|**delhi**|**QA**
File2
3|rohit|**bangalore**|**dev**
2
27.01.2020, 22:10

Теги

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