Хорошо, так что, если я правильно читаю, у вас будет:
file1:
abc 12 34
abc 56 78
abc 90 12
file2:
abc 90 87 <-- common column 2
abc 12 67 <---common column 2
abc 23 1 <-- unique column 2
вывод должен быть:
abc 12 101
abc 90 99
Если это так, то что-то вроде этого (при условии, что они отформатированы в .csv):
$f1 = fopen('file1.txt', 'rb');
$f2 = fopen('file2.txt', 'rb');
$fout = fopen('outputxt.');
$data = array();
while(1) {
if (feof($line1) || feof($line2)) {
break; // quit if we hit the end of either file
}
$line1 = fgetcsv($f1);
if (isset($data[$line1[1]])) {
// saw the col2 value earlier, so do the math for the output file:
$col3 = $line1[2] + $data[$line1[1]];
$output = array($line[0], $line1[1], $col3);
fputcsv($fout, $output);
unset($data[$line1[1]]);
} else {
$data[$line1[1]] = $line1; // cache the line, if the col2 value wasn't seen already
}
$line2 = fgetcsv($f2);
if (isset($data[$line2[1]])) {
$col3 = $data[$line2[1]] + $line2[2];
$newdata = array($line2[0], $line2[1], $col3);
fputcsv($fout, $newdata);
unset($data[$line2[1]]); // remove line from cache
} else {
$data[$line2[1]] = $line2;
}
}
fclose($f1);
fclose($f2);
fclose($fout);
Это происходит с моей головы, не проверено, вероятно, не будет работать, YMMV и т. Д. *
Это значительно упростит ситуацию, если вы предварительно отсортируете два входных файла, так что column2 будет использоваться в качестве ключа сортировки. Это уменьшит размер кэша, так как вы будете знать, видели ли вы уже совпадающее значение и когда выгружать ранее кэшированные данные.