Awk — сравнение 2 файлов с использованием нескольких столбцов и вывод строк из обоих файлов

Awk — сравнение 2 файлов с использованием нескольких столбцов и вывод строк из обоих файлов

Итак, у меня есть два плоских файла в следующем формате:

Файл1.txt

Customer1 12345 12346 12347 15646
Customer2 14444 14445

Файл2.txt

12345 aol.com
12347 gmail.com
12346 google.com
14444 yahoo.com
14445 outlook.com
15646 space.com

Мой вывод Desire будет таким:

Customer1 aol.com gmail.com google.com space.com
Customer2 yahoo.com outlook.com

Пока что я придумал следующее, но, похоже, он использует только столбец 2 из файла 1. Можно ли расширить эту команду, чтобы включить все столбцы в файле 1?

awk 'NR==FNR {a[$1]=$2; next} $2 in a {print $0, a[$2]}' OFS='\' file2.txt file1.txt

решение1

Вам нужно будет пройтись по полям $2далее File1.txt:

$ awk 'NR==FNR {a[$1]=$2; next} {for (i=2;i<=NF;i++) $i = $i in a ? a[$i] : $i} 1' File2.txt File1.txt
Customer1 aol.com google.com gmail.com space.com
Customer2 yahoo.com outlook.com

Его $i = $i in a ? a[$i] : $iможно упростить, $i = a[$i]если вы уверены, что совпадение будет, или если вы хотите заменить несовпадения пустыми полями.

Связанный контент