Я хочу написать, 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
или что-то другое?
text-processing
awk
join
Навид Фархади
источник
источник
cut
иpaste
только, но я не понимаю синтакс правильно.cut
иpaste
посмотрите на их страницу руководства.Ответы:
join
...Вывод
Входные файлы должны быть отсортированы по ключевому полю ... Ваши примеры файлов уже отсортированы, поэтому в этом не было необходимости, но в противном случае вы можете включить сортировку следующим образом.
источник
man join
в командной строке терминала ...-1 2 -2 1
означает: присоединиться к «1-му файлу, 2-му полю» и « 2nd-file 1st-field 'Так
join
иpaste
не везде (они не на моей BusyBox основе системы, например), вот как это сделать с AWK, в соответствии с просьбой:источник
A[$1]=$2 OFS $3
... Вот еще один вариант, который избегает ручного цикла в BEGIN, но это почти то же самое (к awk ), хотя он вводит ненужный тест условия для второго файла:awk 'NR==FNR {A[$1]=$2 OFS $3;next} {print $2, $1, A[$2]}' fileA fileB
... (+ 1)