@Rodion2

Как правильно сравнивать cvs файлы?

Добрый день
Есть 2 cvs файла
Один весит 30мб, другой 80мб (далее f_30 и f_80)
В обоих файлах у каждой строки есть ID
Нужно строки файла f_80 дополнить строками файла f_30 там, где ID строк у файлов совпадают
пример строки из файла: f_80
...
813 Петя программист
412 Коля программист
...


пример строки из файла: f_30
...
622 python зеленый
813 php красный
...


после работы скрипта в файле f_80 должно выглядеть примерно так
...
813 Петя программист python зеленый
814 Коля программист
...


как скрипт работает сейчас:
Сначала весь файлик f_30 читается и запоминается в массив (1 элемент = 1 строка)
потом построчно начинает читаться файл f_80 - берет ID и ищет такую же строку в f_30
нашел? - добавь, удали строку из f_30
не нашел? - дальше

Вопросы:
1) можно ли как то улучшить/переделать/придумать_новый алгоритм сравнения ?
2) нормально ли вообще хранить в памяти массивы по 30мб и больше ?
3) есть ли какие то уже готовые решения в эту сторону - необязательно прямо потеме, но хотя бы рядом, чтобы посмотреть/позаимствовать идеи ?
4) что делать если файлы по 400-500 мб ?
5) как вариант рассматривается перенос файлов в базу и уже аналогичная работа с базой - как вам такая идея ?
  • Вопрос задан
  • 206 просмотров
Пригласить эксперта
Ответы на вопрос 1
@BorisKorobkov Куратор тега PHP
Web developer
перенос файлов в базу и уже аналогичная работа с базой

Да, можно.

Но гораздо проще на bash в одну строку.
Удалить полные дубли строк: cat file1.csv file2.csv | sort -u
Удалить дубли только по первой колонке: cat file1.csv file2.csv | sort -k1,1 -u
Если надо не просто удалить дубли по первой колонке, а еще и сконкатенировать данные по второй колонке, то еще допишите простой while
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы