1) удалить в txt последние 2 столбца (ибо не используются)
- если есть возможность не обрабатывать данные которые не нужны то так и нужно поступить.
2) загнать txt в sql -> обработать там.
- бессмысленное занятие
3) возможно есть что-то для больших файлов у c++.
- суть разбора больших файлов (1, 10, 100, 1000 гигабайт на файл и больше) в том что бы читать его чанками по несколько байт (размер выбирается исходя из задачи) и анализ файла в поточном виде (не загружать его весь в память).
Алгоритм:
1. читаете поточно по N байт
2. при нахождении \n считаете что началась новая строка
3. как только собрали строку - делаете с ней что хотите, в данном случае разбиваете по-пробельно (explode(" ", $str); пример из php, но не суть)
4. закидываете в некий результирующий массив третью ячейку в качестве значения и первые две ячейки в качестве ключа, если данные уже были то суммируете.
Конечно это не спасёт от величины результирующего массива равного количеству уникальных ключей (ячейки x y). Для этого применяют mapReduce, но для вашей задачи он избыточен.
Вариант как избавиться от большого результирующего массива:
1. алгоритм прежний
2. записываете значение в mysql или любую другую базу в виде
INSERT INTO result_table
SET
key = ".$key.",
value = ".$value."
ON DUPLICATE KEY UPDATE value = value + ".$value."
Где result_table.key PRIMARY KEY