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

Я хочу написать 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 или что-то еще?

  • Объединить файлы csv с условиями
  • сравнить файлы по строкам и создать новое одно bash-программирование
  • Я хотел бы присоединиться к двум файлам csv
  • Объединение 2 файлов с использованием совпадения полей
  • Разделить файл, сравнивая два поля в файлах
  • Удаление строк с одним общим полем
  • Объединение столбцов из файлов, если они содержат совпадение в другом столбце
  • Сравнить столбцы из двух CSV и слить на совпадения
  • 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 
    Linux и Unix - лучшая ОС в мире.