Пересечение двух файлов на основе двух столбцов и одного условия

хвост -n 1 ревизии.log | awk '{ print substr ($0, 0, length ($0 )-(length ($0 )-13 ))}'

Если вы хотите напечатать первые тринадцать символов с начала

1
15.09.2021, 09:20
2 ответа

Не знаю, правильно ли я понял вопрос, но вам нужно отсортировать файл по столбцу, который вы хотите использовать в качестве параметра для объединения:

join -1 2 -2 1 <(sort file1 -k2b,2) <(sort file2)

123 Stef. SE 383
827 Stef uq hd

РЕДАКТИРОВАТЬ :, если вы хотите определенный порядок:

join -1 2 -2 1 <(sort file1 -k2b,2) <(sort file2) | awk -F " " '{print $2 " " $1 " " $3 " " $4}'

Stef. 123 SE 383
Stef 827 uq hd

РЕДАКТИРОВАТЬ :добавить grep в фильтр, например показывать только Stef.а не Стеф (без точки)

join -1 2 -2 1 <(sort file1 -k2b,2) <(sort file2) | awk -F " " '{print $2 " " $1 " " $3 " " $4}' | grep "Stef\."

Stef. 123 SE 383

ПОСЛЕДНЕЕ РЕДАКТИРОВАНИЕ (Надеюсь)

Похоже, вы пропустили самое простое:

awk 'NR==FNR{A[$1];next}$2 in A' file2.txt file1.txt | grep "^Stef"
1
15.09.2021, 09:41

В зависимости от того, хотите ли вы, чтобы $1точно соответствовало Stef:

$ awk 'NR==FNR{a[$1]; next} (FNR==1) || (($2 in a) && ($1=="Stef"))' file2 file1
col1.   col2    col2    col4
Stef    827     uq      hd

или слова, начинающиеся с Stef, например.Stef.:

$ awk 'NR==FNR{a[$1]; next} (FNR==1) || (($2 in a) && ($1~/^Stef/))' file2 file1
col1.   col2    col2    col4
Stef.   123     SE      383
Stef    827     uq      hd
0
15.09.2021, 13:04

Теги

Похожие вопросы