Как сравнить два файла

Этот процесс больше не делает функционал Volar Green функциональным в Ubuntu 14.04. Прошивка была перепрограммирована на прошивку dvb-usb-it9135-02 вместо прошивки dvb-usb-af9035, которая полностью сломала мою 4-х тюнерную систему. Используется для работы с 14.04, не сейчас.

Я думаю, что dvb-usb-it9135 является правильной прошивкой для Volar Black, и предполагается, что она также правильна для Volar Green.

The Green and the Black это разные чипы - просто !!!! спросите любого меерката.

1
задан 29 August 2014 в 23:40

8 ответов

Или вы можете использовать Meld Diff

. Meld помогает сравнивать файлы, каталоги и проекты, контролируемые версиями. Он обеспечивает двух- и трехстороннее сравнение файлов и каталогов и поддерживает многие популярные системы управления версиями.

Установите, запустив:

sudo apt-get install meld

Ваш пример:

Сравнить каталог:

[d7 ]

Пример с полным текстом:

31
ответ дан 24 May 2018 в 04:19

Вы можете использовать vimdiff.

Пример:

vimdiff  file1  file2
9
ответ дан 24 May 2018 в 04:19

Meld - действительно отличный инструмент. Но вы также можете использовать diffuse для визуального сравнения двух файлов:

diffuse file1.txt file2.txt

7
ответ дан 24 May 2018 в 04:19

Litteraly, придерживающийся вопроса (file1, file2, outputfile с сообщением «has changed»), скрипт ниже работает.

Скопируйте сценарий в пустой файл, сохраните его как compare.py, сделайте это исполняемый, запустите его командой:

/path/to/compare.py <file1> <file2> <outputfile>

Сценарий:

#!/usr/bin/env python

import sys
file1 = sys.argv[1]; file2 = sys.argv[2]; outfile = sys.argv[3]

def readfile(file):
    with open(file) as compare:
        return [item.replace("\n", "").split(" ") for item in compare.readlines()]

data1 = readfile(file1); data2 = readfile(file2)
mismatch = [item[0] for item in data1 if not item in data2]

with open(outfile, "wt") as out:
    for line in mismatch:
        out.write(line+" has changed"+"\n")

С помощью нескольких дополнительных строк вы можете сделать либо печать в выходной файл, либо терминал, в зависимости от того, установлен ли выходной файл:

Для печати в файл:

/path/to/compare.py <file1> <file2> <outputfile>

Для печати в окне терминала:

/path/to/compare.py <file1> <file2> 

Сценарий:

#!/usr/bin/env python

import sys

file1 = sys.argv[1]; file2 = sys.argv[2]
try:
    outfile = sys.argv[3]
except IndexError:
    outfile = None

def readfile(file):
    with open(file) as compare:
        return [item.replace("\n", "").split(" ") for item in compare.readlines()]

data1 = readfile(file1); data2 = readfile(file2)
mismatch = [item[0] for item in data1 if not item in data2]

if outfile != None:
        with open(outfile, "wt") as out:
            for line in mismatch:
                out.write(line+" has changed"+"\n")
else:
    for line in mismatch:
        print line+" has changed"
7
ответ дан 24 May 2018 в 04:19

Вы можете использовать команду cmp: выход

cmp -b "File_1.txt" "File_2.txt"

будет

a b differ: byte 25, line 3 is 125 U 116 N
7
ответ дан 24 May 2018 в 04:19

FWIW, мне больше нравится то, что я получаю из бок о бок, вывод из diff

diff -y -W 120 File_1.txt File_2.txt

даст что-то вроде:

User1 US                            User1 US
User2 US                            User2 US
User3 US                          | User3 NG
6
ответ дан 24 May 2018 в 04:19

Простым способом является использование colordiff, который ведет себя как diff, но раскрашивает его вывод. Это очень полезно для чтения diff. Используя ваш пример,

$ colordiff -u File_1.txt File_2.txt
--- File_1.txt  2016-12-24 17:59:17.409490554 -0500
+++ File_2.txt  2016-12-24 18:00:06.666719659 -0500
@@ -1,3 +1,3 @@
 User1 US
 User2 US
-User3 US
+User3 NG

, где опция u дает унифицированный diff. Вот как выглядит раскрашенный diff:

Установите colordiff, запустив sudo apt-get install colordiff.

3
ответ дан 24 May 2018 в 04:19

Дополнительный ответ

Если вам не нужно знать, какие части файлов отличаются, вы можете использовать контрольную сумму файла. Существует много способов сделать это, используя md5sum или sha256sum. В принципе, каждый из них выводит строку, в которую помещается содержимое хэша. Если оба файла одинаковы, их хэш будет таким же. Это часто используется при загрузке программного обеспечения, например, в Ubuntu. Они часто используются для проверки целостности загруженного контента.

Рассмотрим сценарий ниже, где вы можете дать два файла в качестве аргументов, и файл скажет вам, являются ли они одинаковыми или нет. [!d2 ]

#!/bin/bash

# Check if both files exist  
if ! [ -e "$1"  ];
then
    printf "%s doesn't exist\n" "$1"
    exit 2
elif ! [ -e "$2" ]
then
    printf "%s doesn't exist\n" "$2"
    exit 2
fi

# Get checksums of eithe file
file1_sha=$( sha256sum "$1" | awk '{print $1}')
file2_sha=$( sha256sum "$2" | awk '{print $1}')

# Compare the checksums
if [ "x$file1_sha" = "x$file2_sha" ]
then
    printf "Files %s and %s are the same\n" "$1" "$2"
    exit 0
else
    printf "Files %s and %s are different\n" "$1" "$2"
    exit 1
fi

Пример прогона:

$ ./compare_files.sh /etc/passwd ./passwd_copy.txt                                                                
Files /etc/passwd and ./passwd_copy.txt are the same
$ echo $?
0
$ ./compare_files.sh /etc/passwd /etc/default/grub                                                                
Files /etc/passwd and /etc/default/grub are different
$ echo $?
1

Старые ответы

Кроме того, есть команда comm, которая сравнивает два отсортированных файла и дает результат в 3-х столбцах : столбец 1 для элементов, уникальных для файла # 1, столбец 2 для элементов, уникальных для файла # 2, и столбца 3 для элементов, присутствующих в обоих файлах.

Чтобы подавить любой столбец, вы можете использовать переключатели -1, -2 и -3.

Ниже вы можете увидеть скриншот команды в действии.

Существует только одно требование: файлы должны быть отсортированы для правильной их сопоставления. Для этой цели может использоваться команда sort. Bellow - это еще один снимок экрана, где файлы сортируются, а затем сравниваются. Строки, начинающиеся с левого звонка только в File_1, строки, начинающиеся с столбца 2, принадлежат только File_2

enter image description here

2
ответ дан 24 May 2018 в 04:19
  • 1
    @DavidFoerster его трудно редактировать на мобильном телефоне :) Сделано сейчас, хотя – Sergiy Kolodyazhnyy 23 May 2015 в 12:17

Другие вопросы по тегам:

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