命令行仅考虑特定列中的常见值

时间:2014-01-27 12:22:31

标签: linux awk terminal command-line-arguments comm

我正在寻找一个简单的命令行来帮助我完成以下任务。

我有两个文件,我想打印他们在Col2中有共同值的行。

例如,File1类似于以下3列制表符分隔示例

File1中

cat big 24
cat small   13
cat red 63

文件2

dog big 34
chicken plays   39
fish    red 294

期望的输出

big
red

我使用comm语法尝试了命令:comm /path/to/file1/ /path/to/file2 但是,它不会输出任何内容,因为Col1和Col3中的值很少会出现共同点。 有没有人建议如何解决这个问题,或许awk是一个更好的解决方案?

2 个答案:

答案 0 :(得分:1)

如果您阅读comm的手册页,您会看到它适用于sorted个文件。但是awk很灵活,你可以控制你想要的东西:

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

答案 1 :(得分:1)

您可以使用pasteawk

一次性完成此操作
paste file1 file2 | awk '$2 == $5 { print $2 }'

输出:

big
red