TEST1.txtから
ID_ID First_name Last_name Address Contact_Number
ID1 John Rock 32, Park Lake, California 2222200000
ID2 Tommy Hill 5322 Otter Lane Middleberge 3333300000
ID3 Leonardo Test Half-Way Pond, Georgetown 4444400000
ID8 Rhyan Bigsh 6762,33 Ave N,St. Petersburg 5555500000
ID50 Steve Goldberg 6762,33 Ave N,St. Petersburg 6666600000
&&
TEST2.txtから
ID_ID First_name Last_name Address Contact_Number
ID1 John Rock 32, Park Lake, California 2222200000
ID2 Tommy1 Hill1 5322 Otter Lane Middleberge 3333300000
ID3 Leonardo Test Half-Way Pond, Georgetown 4444400000
ID80 Sylvester Stallone 5555500000
ID50 Steve Goldberg 6762,33 Ave N,St. Petersburg 6666600000
ID60 Mark Waugh St. Petersburg 7777700000
望ましい結果:-
TEST2.txtの違いは、行番号と列番号(値が一致しない場所)です。
Line No. 2 COLUMN NO 2,3
Line No. 4 COLUNN NO 1,2,3,4
Line No. 6 COLUNN NO 1,2,3,4,5
注:比較するファイルサイズはGB単位で、ファイルはタブで区切られ、タブで区切られた列は250を超えます。
答え1
苦手ですが効果的です:
BEGIN {
FS=OFS="\t"
}
NR==FNR {
# 5 = number of columns
for (i=0;i<=5;i++) {
a[$1,i]=$i }
}
{ if ( a[$1,0] != $0 ) {
b=""
for (i=1;i<=5;i++) {
if ( a[$1,i] != $i ) {
b=b i", "
}
}
print "Line No." FNR," Column No. ",b
}
}
ただし、これを行うには(たとえば)FORTRANプログラムを作成することをお勧めします。たとえば、10,000行などの大量のデータを読み取ることができ、awk
このソリューションを使用するにはRAMに1つ以上のファイルを保存する必要があります。これはGBサイズに問題がある可能性があります。ファイル。次のように見えます。
- 各ファイルのデータチャンクを配列(行と列)として読み込みます。
- 配列を比較し、a(i,j)=b(i,j) の結果を使用して論理配列を作成します。
- 出力を生成するために論理配列を使用します。
- 出力を印刷し、次のブロックを読みます。
ファイルがソートされ、すべての行が含まれているので、非常に簡単です。