Командная строка для рассмотрения общих значений только в определенном столбце
Я ищу простую командную строку, чтобы помочь мне со следующей задачей.
У меня есть два файла, и я хотел бы напечатать строки, для которых у них есть общее значение в 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