В 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 - это номер строки и номер столбца (где значения не match)
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
Примечание. Размер файла для сравнения указан в ГБ, файл разделен табуляцией и содержит более 250 столбцов, разделенных табуляцией.
Неуклюже, но работает:
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
должны содержать хотя бы один файл в ОЗУ, что может быть проблемой для ваших файлов размером в ГБ. Это может выглядеть так:
Поскольку ваши файлы отсортированы и в них есть все строки, это довольно просто.