从两个文件中查找给定列中的公共元素并输出每个文件中的列值

tur*_*tle 3 awk comm join

我有两个带有制表符分隔值的文件,如下所示:

文件 1:

A    1
B    3
C    1
D    4
Run Code Online (Sandbox Code Playgroud)

文件2:

E    1
B    3
C    2
A    9
Run Code Online (Sandbox Code Playgroud)

我想在文件 1 和 2 之间找到第 1 列中的字符串相同的行,然后获取相应的值。所需的输出是一个看起来像这样的文件:

B    3    3
C    1    2
A    1    9
Run Code Online (Sandbox Code Playgroud)

这可以用 Unix one-liner 来完成吗?

jau*_*ume 10

join如果结果中的行排序无关紧要,GNU coreutils 包含的命令完全符合您的要求:

join <(sort file1) <(sort file2)

A 1 9
B 3 3
C 1 2
Run Code Online (Sandbox Code Playgroud)

如果您想要返回标签,请执行以下操作:

join <(sort file1) <(sort file2) | tr ' ' '\t'

A   1   9
B   3   3
C   1   2
Run Code Online (Sandbox Code Playgroud)

或者使用t选项join.

<()又名进程替换,需要 ksh93(功能起源于)、bash 或 zsh)