Я хотел бы иметь разницу между 2 файлами. Хотите узнать конкретно, в какой колонке произошла разница с использованием Unix Scripting - PullRequest
0 голосов
/ 05 января 2012

Мы выполняем проект переноса данных из Informix в Oracle. Теперь возникло требование сравнить данные между таблицами Informix и Oracle. Поэтому Table1 из Informix будет перенесен в Table1 в Oracle.
Теперь данные переносятся из Table1 в Informix в Table1 в Oracle. Я беру данные из обеих таблиц в 2 плоских файла. Я просто хочу посмотреть, есть ли разница в данных в 2 файлах.

File1 скажем, 1 миллион записей с 300 столбцами и File2 скажем, 1 миллион записей с 300 столбцами. File1 и File2 - файлы с разделителями каналов. Так что разница может быть где угодно в файле. Может совпадать почти вся строка, но могут быть различия в одном / двух столбцах. Поэтому я хотел бы выяснить различия, имея в виду все вышеперечисленное. Разница вывода должна перечислять что-то вроде row1 in file1 is not matching with row1 in file2 at column 3 и значение столбцов из обоих файлов. Все такие отличия от обоих файлов должны быть перечислены на консоли в понятном для неспециалистов формате.

Я хочу просто объяснить это на примере, чтобы сделать его более понятным.

Мой первый файл, если он выглядит так:

col1|col2|col3|col4|col5|col6
1234|ramyakrishna|4567|ramya.krishna@worse.com|228802|worse
1235|Chandan|4567|chandan.kumar@worse.com|228862|worse
1236|Kacitha|4567|kacitha.mishra@worse.com|228872|worse
1238|Shajin|4567|shajin.mahesh@worse.com|228873|worse

Мой второй файл выглядит так:

col1|col2|col3|col4|col5|col6
1234|ramyakrishna|4567|ramya.krishna@good.com|228802|good
1235|Chandan|4567|chandan.kumar@worse.com|228789|worse
1236|Kacitha|4567|kacitha.mishra@worse.com|228872|worse

Так что, когда я сравниваю оба файла. Мы видим, что есть разница в col4 и col6 в row2. Поэтому я хочу что-то вроде этого:

1234|ramyakrishna|4567|ramya.krishna@good.com|228802|good
:COL4-EXPECTED-ramya.krishna@worse.com:COL6-EXPECTED-worse

Таким образом, в вышеприведенном ряду второй файл должен быть напечатан Затем ожидаемые значения должны быть напечатаны.

Я знаю, что файлы должны быть отсортированы перед использованием любого сценария.


Для скрипта fge я получаю вывод, как показано ниже:

Я получаю вывод, как показано ниже

$perl diff.perl    

Line 1: different value for column 38 (was g, expected w)
Line 1: different value for column 40 (was o, expected r)
Line 1: different value for column 41 (was d, expected s)
Line 1: different value for column 42 (was ., expected e)
Line 1: different value for column 43 (was c, expected .)
Line 1: different value for column 44 (was o, expected c)
Line 1: different value for column 45 (was m, expected o)
Line 1: different value for column 46 (was |, expected m)

Я хочу сравнение всего столбца. Файлы являются | файлами с разделителями.

Ответы [ 3 ]

2 голосов
/ 05 января 2012

Нечто подобное (в perl) может подойти - предполагается, что файлы имеют одинаковое количество строк, но это можно легко проверить с помощью wc, и что ни одна строка не пуста:

#!/usr/bin/perl -W
use strict;

open FILE1, "file1" or die;
open FILE2, "file2" or die;

my (@cols1, @cols2);
my ($val1, $val2);
my $linenr = 0;

while (my $line = <FILE1>) {
    @cols1 = split('|', $line);
    @cols2 = split('|', <FILE2>);
    $linenr++;

    for (my $i = 0; $i <= $#cols1; $i++) {
        $val1 = $cols1[$i]; $val2 = $cols2[$i];
        if ("$val1" ne "$val2") {
            printf("Line %d: different value for column %d (was %s, expected %s)\n",
                $linenr, $i+1, $val2, $val1);
    }
}
2 голосов
/ 05 января 2012

Если файлы отсортированы в том же порядке, посмотрите comm или diff.Имейте в виду, что это работает на уровне линии.Чтобы детализировать различия на уровне поля, можно начать с подмножества тех, кто отличается от уровня линии.

0 голосов
/ 05 января 2012

Я рекомендую WinMerge , чтобы сравнить два больших файла, потому что это быстро.К сожалению, он доступен только в Windows (скоро будет доступен в linux).

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

Надеюсь, это поможет.

...