Сравните два файла - PullRequest
       3

Сравните два файла

1 голос
/ 23 августа 2010

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

comm develop1.txt qa1.txt -12

Но следующая команда diff не показывает ожидаемой разницы.

diff develop1.txt qa1.txt --side-by-side

Ожидаемый результат выглядит следующим образом:

mysql-data/webservice 280292 | mysql-data/webservice 28684

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

Ответы [ 3 ]

3 голосов
/ 23 августа 2010

Если вы готовы к чему-то быстрому и грязному (не то, что я выпустил бы в производство, но, конечно, хорошо для моих собственных целей):

for key in $(cat develop1.txt qa1.txt | awk '{print $1}' | sort -u) ; do
    devval=$(grep "^${key} " develop1.txt | awk '{print $2}')
    qa1val=$(grep "^${key} " qa1.txt | awk '{print $2}')
    if [[ "${devval}" != "${qa1val}" ]] ; then
        echo "$key: dev=[${devval}], qa=[${qa1val}]"
    fi
done

Первая строка извлекает все уникальные ключи из обоихфайлы в список (не будет работать, если у ваших ключей есть пробелы, но это может затруднить реализацию какого-либо решения, и здесь это не так).

Вторая и третья строки простополучить значения для каждого ключа из двух файлов.

Затем оператор if выводит ключ и два значения, но только там, где значения различаются.

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

1 голос
/ 23 августа 2010

Я не уверен, что точно понимаю, что вы хотите сделать. Вы пытались использовать команду join? Учитывая два файла, которые содержат только примеры строк, которые вы показали, результат будет следующим:

$ join develop1.txt qa1.txt
mysql-data/webservice 280292 28684

Вы можете указать join выводить негодные строки с помощью:

$ join -a1 -a2 develop1.txt qa1.txt
0 голосов
/ 23 августа 2010

Я знаю, что я скажу не совсем то, что вы спрашиваете, но вы пробовали программу визуального сравнения? Такой WinMerge (для Windows) или Meld (для Linux)? Предварительный просмотр их интерфейсов приведен ниже (взято из изображения Google):

WinMerge:

alt text

Meld:

alt text

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...