0

Informix から Oracle に移行するデータ移行プロジェクトを行っています。ここで、Informix テーブルと Oracle テーブルの間でデータを比較する必要が生じました。したがって、Informix の Table1 は Oracle の Table1 に移行されます。
現在、データはTable1Informix からTable1Oracle に移行されています。両方のテーブルから 2 つのフラット ファイルにデータを取得しています。2 つのファイルにデータの違いがあるかどうかを確認したいだけです。

File1300列の100万レコードとFile2言い、300列の100万レコードと言います。File1およびFile2パイプ区切りファイルです。したがって、違いはファイルのどこにでもある可能性があります。ほとんどの行全体が一致する可能性がありますが、1 つまたは 2 つの列に違いがある可能性があります。以上のことを念頭に置いて、違いを調べてみたいと思います。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|228​​802|もっと悪い
1235|チャンダン|4567|chandan.kumar@worse.com|228​​862|もっと悪い
1236|Kacitha|4567|kacitha.mishra@worse.com|228​​872|もっと悪い
1238|シャジン|4567|shajin.mahesh@worse.com|228​​873|もっと悪い

2 番目のファイルは次のようになります。

col1|col2|col3|col4|col5|col6
1234|ramyakrishna|4567|ramya.krishna@good.com|228​​802|良い
1235|チャンダン|4567|chandan.kumar@worse.com|228​​789|もっと悪い
1236|Kacitha|4567|kacitha.mishra@worse.com|228​​872|もっと悪い

したがって、両方のファイルを比較すると。col4col6に違いがあることがわかりますrow2。だから私はこのようなものが欲しい:

1234|ramyakrishna|4567|ramya.krishna@good.com|228​​802|良い
:COL4-EXPECTED-ramya.krishna@worse.com:COL6-EXPECTED-worse

したがって、2番目のファイルから上の行で印刷する必要があります。次に、期待値を出力する必要があります。

スクリプトを使用する前にファイルをソートする必要があることは知っています。


fge のスクリプトでは、以下のような出力が得られます。

私は以下のような出力を得ています

$perl diff.perl    

行 1: 列 38 の異なる値 (前は g、予想は w)
1 行目: 列 40 の値が異なります (以前は o で、r が必要でした)
行 1: 列 41 の異なる値 (以前は d、予期されていたのは s)
行 1: 列 42 の異なる値 (was ., expected e)
1 行目: 列 43 の値が異なります (以前は c でしたが、予期されていました)。
1 行目: 列 44 の値が異なります (以前は o で、c が必要でした)
1 行目: 列 45 の値が異なる (以前は m、期待値は o)
1 行目: 列 46 の値が異なります (以前は |、m でした)

列全体の比較が必要です。ファイルは|区切りファイルです。

4

3 に答える 3

2

ファイルが同じ順序でソートされていると仮定して、commまたはを見てくださいdiff。これは回線レベルで動作することに注意してください。フィールド レベルで違いを掘り下げるには、行レベルで異なるもののサブセット母集団から始めることができます。

于 2012-01-04T20:14:21.877 に答える
2

次のように (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);
    }
}
于 2012-01-04T21:53:40.567 に答える
0

WinMergeは高速なので、2 つの大きなファイルを比較することをお勧めします。残念ながら、これは Windows でのみ利用可能です (まもなく Linux で利用可能になります)。

フラット ファイルはデータベースから取得されるため、テーブルをダンプするときに簡単に並べ替えることができます。次に、winmerge を使用してファイルを比較します。

お役に立てれば。

于 2012-01-04T23:44:49.977 に答える