Linux 基于列中的字段联接2个文件

Linux 基于列中的字段联接2个文件,linux,join,awk,Linux,Join,Awk,我正在尝试连接两个具有不同行和列长度的文件,并且有一个列以未排序的方式包含类似的信息 这些文件如下所示: 文件1 文件2 预期产出: 文件3 ab 23 33 4 55 6 7 8 9 data ab 33 4 5 ab 2 3 44 5 6 7 8 data ab 33 4 5 ab 3 4 22 7 8 9 9 00 9 data ab 33 4 5 ad 2 3 4 5 4 3 data ad 3 4 5 ac 456 47 8 9 0 0 hh kk data ac 3 4 5 6 7

我正在尝试连接两个具有不同行和列长度的文件,并且有一个列以未排序的方式包含类似的信息

这些文件如下所示: 文件1

文件2

预期产出:

文件3

ab 23 33 4 55 6 7 8 9 data ab 33 4 5
ab 2 3 44 5 6 7 8 data ab 33 4 5
ab 3 4 22 7 8 9 9 00 9 data ab 33 4 5
ad 2 3 4 5 4 3 data ad 3 4 5 
ac 456 47 8 9 0 0 hh kk data ac 3 4 5 6 7 8
再看看其他帖子,我发现最好的方法是使用

awk
我试过:

awk -F "\t" 'NR==FNR{a[$2]=$0; next}$1 in a {print $0, a[$2]}' file2 file1 > file3
问题是它只打印文件1,而不打印文件2

我真的不明白我的错误在哪里。有什么建议吗


多谢各位

您没有发布预期的输出,但您的awk行有问题,我想应该是:

awk -F "\t" 'NR==FNR{a[$2]=$0; next}$1 in a {print $0, a[$1]}' file2 file1

我在上一个
{…}
a[$2]->a[$1]

发布了所需的输出。这太令人沮丧了……是的,你是对的!但我不明白为什么。
a[$2]
是否表示“打印整个第一个文件”?@efrem in
NR==FNR{..}
$1,2,3
是来自第一个输入文件
file2
的列。在{…}中的
$1中,
$1,$2,$3…
是您的第二个输入文件中的列,即
file1
,我想您被
$x
和输入文件弄糊涂了。非常感谢。它确实起到了作用,但是,正如我在编辑的帖子中指出的,现在发生了一些奇怪的事情。我不明白为什么。
awk -F "\t" 'NR==FNR{a[$2]=$0; next}$1 in a {print $0, a[$2]}' file2 file1 > file3
awk -F "\t" 'NR==FNR{a[$2]=$0; next}$1 in a {print $0, a[$1]}' file2 file1