Как объединить два файла на основе соответствия двух столбцов? CSV

Мне нравится file1:

6688249-7,03 / 02/2017, 5515 , 02-фев-17

16914917-8,03 / 02/2017, 5521 , 02-фев-17

И файл2:

5515 , 6688249-7,06-02-2017 04:25:47 PM, ASIG, ELIZABETH PRIETO

5515 , 6688249-7,06-02-2017 04:56:32 PM, URR, ELIZABETH PRIETO

5521 , 16914917-8,06-02-2017 12:51:04 PM, ASIGN, SOLANGE

5521 , 16914917-8,27-02-2017 04:32:11 PM, Ex, SOLANGE

И хотелось бы file3, чтобы:

6688249-7,03 / 02 / 2017,5515,02-feb-17,06-02-2017 04:25:47 PM, ASIG, ELIZABETH PRIETO

6688249-7,03 / 02 / 2017,5515,02-feb-17,06-02-2017 04:56:32 PM, URR, ELIZABETH PRIETO

16914917-8,03 / 02 / 2017,5521,02-feb-17,06-02-2017 12:51:04 PM, ASIGN, SOLANGE

16914917-8,03 / 02 / 2017,5521,02-feb-17,27-02-2017 04:32:11 PM, Ex, SOLANGE

Это означает, что ключ 3-го столбца (3-й столбец file1, 1-й столбец 1) помещает 3-й, 4-й, 5-й столбцы файла2 в файл1,

2 Solutions collect form web for “Как объединить два файла на основе соответствия двух столбцов? CSV”

Что-то вроде этого должно быть достаточно:

awk 'BEGIN{FS=OFS=","}NR==FNR{a[$3]=$0;next}$1 in a{print a[$1],$3,$4,$5}' file1 file2 

если порядок сортировки вывода несуществен, это похоже на работу для join

 join -1 3 -2 1 -t, -o 1.1,1.2,1.3,1.4,2.3,2.4,2.5 <(sort -k3,3 -t, file1) \ <(sort -k1,1 -t, file2) 6688249-7,03/02/2017,5515,02-feb-17,06-02-2017 04:25:47 PM,ASIG,ELIZABETH PRIETO 6688249-7,03/02/2017,5515,02-feb-17,06-02-2017 04:56:32 PM,URR,ELIZABETH PRIETO 16914917-8,03/02/2017,5521,02-feb-17,06-02-2017 12:51:04 PM,ASIGN,SOLANGE 16914917-8,03/02/2017,5521,02-feb-17,27-02-2017 04:32:11 PM,Ex,SOLANGE 

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

  • Сценарий Bash не может распознавать переменную как часть пути
  • Терминал Ubuntu закрывается после запуска скрипта
  • Переименование файлов после выталкивания файлов с одинаковыми именами с разных серверов
  • Ограничение системных библиотек, которые программа может использовать
  • Частота слов в тексте на неанглийском языке: как я могу объединить единичные и множественные формы и т. Д.?
  • KSH - если / then / else против двойных усилителей (&&) и двойных труб (||)
  • Уменьшить резервный файл журнала
  • Как выбрать уникальные значения массива?
  • Правильная блокировка в сценариях оболочки?
  • Как передать переменную в sftp?
  • whiptail или диалог
  • Linux и Unix - лучшая ОС в мире.