Задать вопрос
@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) как вариант рассматривается перенос файлов в базу и уже аналогичная работа с базой - как вам такая идея ?
  • Вопрос задан
  • 210 просмотров
Подписаться 1 Средний Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
@BorisKorobkov Куратор тега PHP
Web developer
перенос файлов в базу и уже аналогичная работа с базой

Да, можно.

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

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽