объединить два файла csv на основе условия

У меня два файла csv позволяют говорить, что A.csv и B.csv A.csv содержат (размер файла более 5 гб)

64.234 20.342 786 63.231 20.124 765 63.652 20.857 387 

B.csv содержит (размер файла более 5 гб)

  63.231 20.124 234 63.652 20.857 383 64.234 20.342 876 

Мне нужен финальный файл

  64.234 20.342 786 876 63.231 20.124 765 234 63.652 20.857 387 383 

Долгота и широта будут использоваться для условия Когда долгота и широта равны, тогда значение зоны wll будет сохранено, есть ли быстрое решение для этого, используя sed, скрипт или любые инструменты … !!!!

4 Solutions collect form web for “объединить два файла csv на основе условия”

Не существует быстрого решения вашей проблемы, поскольку входные файлы не сортируются. Однако вы могли бы сделать что-то подобное:

 join -o 0,1.2,1.3,2.3 <(sort A.csv) <(sort B.csv) 

Попробуйте с этим:

 for i in `awk '{print $1}' A.csv`; do t1=`awk -va="$i" '$1==a {print $3}' A.csv`; awk -F' ' -va="$i" -vb="$t1" '$1==a {print $1" "$2" "$3" " b }' B.csv; done 

Надеюсь, это помогло.

Хотя вопрос нечетен относительно того, какие поля следует использовать для объединения, похоже, что это поле1 и поле2 (с опечаткой в A.csv field2=20.875 вместо 20.857 ).

Если вам нужно присоединиться только к первому полю, решение Michaels в порядке.
Если вам нужно присоединиться к первым двум полям, вы можете использовать:

 join <(sed -e 's/ */:/' a.csv | sort) <(sed -e 's/ */:/' b.csv | sort) 

(вам может потребоваться настроить sed regex, если поля не разделены пробелами). Решение Ракеша довольно неэффективно, поскольку оно сканирует как A.csv и B.csv для каждой строки в A.csv .

При таком большом количестве данных вам следует рассмотреть возможность импорта данных в базу данных, создания индексов (широта, долгота), а затем вы можете получить свои результаты с помощью

 select a.latitude, a.longitude, a.value, b.value from a, b where a.latitude = b.latitude and a.longitude = b.longitude; 
  • Как создать md5-файл для каждой папки в рекурсивном диске?
  • Как присвоить значение переменной, когда значение содержит символ $ в ней
  • Сравнение двух файлов и запись несогласованных строк вместе с несогласованными столбцами. Указание несогласованных столбцов - это моя основная проблема
  • отображать переменную unix с помощью dbms_output.put_line
  • Как добавить пользователей в Linux через сценарий оболочки
  • Печать всех строк файла с несколькими столбцами в сценарии оболочки
  • Как безопасно отменить поиск dns на ip в сценарии оболочки
  • Перенаправление stdout игнорирует строки без символа перевода строки
  • Используя sshpass, код возврата (статус выхода) отличается по неизвестным причинам с использованием допустимых команд
  • Как удалить папки, созданные с именами дат 2016-04-03 до 2016-10-4
  • Как обнаружить, что выполняется менее чем x процессов
  • Interesting Posts

    Увеличение громкости приводит к несбалансированности левого / правого каналов

    Использует ли потоки все еще считающиеся анти-шаблонами?

    Как я могу зарегистрировать свой интернет-трафик, сгруппированный по IP-адресу / имени хоста, порту и т. Д.?

    awk не будет использовать '||' как полевой разделитель

    Создайте каталог, используя имена файлов, и переместите файлы в соответствующую папку

    Pamd больше не монтирует диск ecryptfs с момента обновления

    Отсутствие применения tc фильтра

    установка библиотеки документов SharePoint с помощью davfs в Linux

    Как настроить такую ​​функцию, чтобы я всегда мог использовать SSH для моей системы через Интернет на динамическом IP-адресе?

    Удалить пробелы, дефисы и подчеркивания в именах файлов?

    Devicetree параллельный CSI OV7670

    Вход MATE без marco

    передавать файл на удаленный хост и добавлять к файлу, если он существует

    Как развернуть абзацы с помощью sed

    systemd: Как вы запрашиваете статус службы?

    Linux и Unix - лучшая ОС в мире.