Невозможно с помощью grep, но выполнимо с помощью awk:
$ awk 'NR==1 {print $0;next} # Print header
NR==FNR {a[$1]=$2;next} # collect data from file1.txt
{ if($5 in a) # If column L match
{ print($5,a[$5],$1,$7) } # print columns (H and N)
}
' file1.txt file2.txt
В виде одного -вкладыша:
$ awk 'NR==1{print $0;next} NR==FNR{a[$1]=$2;next} {if($5 in a){print($5,a[$5],$1,$7)}}' file1.txt file2.txt
A B C D
5 8 4 8
4 9 7 7
Порядок указан в том порядке, в котором поля отображаются в file2.txt
.
Если вам нужна сортировка, добавьте шаг сортировки.
Я бы использовал пошаговый подход,объяснить
Сортировка файла 1
sort file1.txt > file1.sorted.txt
Извлеките интересующую часть из файла2 (и тоже отсортируйте)
awk '{print $5,$1,$7}' file2.txt | sort > file2_of_interest.txt
Объединить два выхода на основе ключа, который является столбцом 1 в обоих файлах
join file1.sorted.txt file2_of_interest.txt -1 1 -2 1
Вы можете комбинировать эти три шага, используя косвенное обращение -, но в конце вам нужно будет выполнить синтаксический анализ хотя бы одного файла. Также могут возникнуть опасения в случаях, когда столбец L в файле file2.txt не уникален и/или столбец 1 в файле file1.txt не уникален -, вам нужно будет разрешить их, вставив свою бизнес-логику, чтобы сделать ключ уникальным.