Сценарий оболочки для объединения двух файлов

Я хочу написать shell script который получит два файла A и B и получить результат следующим образом:

Файл A :

 user_a tel_a addr_a user_b tel_b addr_b 

Файл B :

 process_1 user_a process_2 user_a process_3 user_b 

И результат:

 user_a process_1 tel_a addr_a user_a process_2 tel_a addr_a user_b process_3 tel_b addr_b 

Как я могу это сделать? awk или что-то еще?

2 Solutions collect form web for “Сценарий оболочки для объединения двух файлов”

join

 join -1 2 -2 1 FileB FileA 

Вывод

 user_a process_1 tel_a addr_a user_a process_2 tel_a addr_a user_b process_3 tel_b addr_b 

Входные файлы нужно сортировать по ключевому полю … Ваши файлы примеров уже отсортированы, поэтому не было необходимости, но в противном случае вы могли бы включить сортировку следующим образом.

 join -1 2 -2 1 <(sort -k2 FileB) <(sort FileA) 

Поскольку join и paste недоступны повсюду (например, они не работают в моей системе на базе BusyBox), вот как это сделать с awk, как просили:

 awk 'BEGIN { while( (getline < "fileA") > 0) A[$1]=$2 OFS $3 # read fileA into the array A close("fileA") } { print $2, $1, A[$2] }' fileB 
  • Усеченный результат, возвращаемый JOIN
  • Как присоединиться к файлам с необходимыми столбцами в Linux?
  • Объединение строк с одинаковым полем
  • Заменить значения на основе соответствия переменной ID
  • Объединить 2 файла на основе всех значений первого столбца первого файла
  • Как узнать общие элементы между двумя файлами?
  • Присоединиться: два файла - но только добавить последние два столбца
  • Объединение столбцов из файлов, если они содержат совпадение в другом столбце
  • присоединить несколько строк на основе столбца1
  • Вам нужно сравнить два файла и распечатать все столбцы, а затем отобразить как NA, а затем присоединиться к другому файлу
  • Присоединить (большие) файлы по алфавитно-цифровому шаблону
  • Linux и Unix - лучшая ОС в мире.