Командная строка для рассмотрения общих значений только в определенном столбце

Я ищу простую командную строку, чтобы помочь мне со следующей задачей.

У меня есть два файла, и я хотел бы напечатать строки, для которых у них есть общее значение в Col2.

Например, File1 похож на следующий разделенный на три столбец пример

File1

cat big 24
cat small   13
cat red 63

File2

dog big 34
chicken plays   39
fish    red 294

желаемый результат

big
red

Я пробовал команды, используя commсинтаксис: comm /path/to/file1/ /path/to/file2Тем не менее, он ничего не выводит, потому что значения в Col1 и Col3 очень редко будут общими. У кого-нибудь есть предложения относительно того, как это можно решить, может быть awk лучшее решение?

2 ответа

Решение

Если вы читаете справочную страницу comm, вы увидите, что это работает с sorted файлы. Но awk гибок, вы можете контролировать то, что хотите:

 awk 'NR==FNR{a[$2]=1;next}a[$2]{print $2}' file1 file2

Вы можете сделать это за один проход с paste а также awk:

paste file1 file2 | awk '$2 == $5 { print $2 }'

Выход:

big
red
Другие вопросы по тегам