根据列中的字段连接2个文件

时间:2014-06-10 08:12:22

标签: linux join awk

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

文件如下所示: 档案1

ab 23 33 4 55 6 7 8 9
ab 2 3 44 5 6 7 8
ab 3 4 22 7 8 9 9 00 9
ad 2 3 4 5 4 3
ac 456 47 8 9 0 0 hh kk
af 2 dd 5 6 zz 7 8

file2的

data ab 33 4 5
data ad 3 4 5 
data ac 3 4 5 6 7 8 

预期产出:

文件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

还要查看其他帖子How to join multiple txt files into based on column? Join on first column of two files,我发现最好的方法是使用

awk

我试过了:

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

问题是它只打印file1而不是file2。

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

非常感谢!

1 个答案:

答案 0 :(得分:0)

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

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

我在上一次{...}a[$2] -> a[$1]中进行了更改。