Join awk/加入?如何根据两个文件之间的匹配从列中打印字段

Join awk/加入?如何根据两个文件之间的匹配从列中打印字段,join,awk,sed,Join,Awk,Sed,我有三个文件要合并为一个,以分号分隔(请注意,第一行值的文件1中可能出现多个) 文件1: 1;FOO;BAR;NU 1;V;V;E 2;F;B;N 3;FOO;NU;BAR 文件2: 1;YES 2;NO 3;YES 文件3: 1;NO 2;NO 3;YES 预期结果:(文件1$0、文件2$2、文件3$2) 我不知道该怎么做。。。因此,任何帮助都将不胜感激 这可能适合您(GNU join): 首先使用连接file1和file2作为字段分隔符,并使用stdin和file3以及相同的分隔符将结

我有三个文件要合并为一个,以分号分隔(请注意,第一行值的文件1中可能出现多个)

文件1:

1;FOO;BAR;NU
1;V;V;E
2;F;B;N
3;FOO;NU;BAR
文件2:

1;YES
2;NO
3;YES
文件3:

1;NO
2;NO
3;YES
预期结果:(文件1$0、文件2$2、文件3$2)

我不知道该怎么做。。。因此,任何帮助都将不胜感激

这可能适合您(GNU join):

首先使用
连接file1和file2作为字段分隔符,并使用stdin和file3以及相同的分隔符将结果传递给第二次调用join。

这可能适用于您(GNU join):


首先使用
连接file1和file2
作为字段分隔符,并使用stdin和file3以及相同的分隔符将结果传递给第二次调用join。

使用
gnu awk
可以执行以下操作:

awk'BEGIN{FS=OFS=“;”}
ARGIND==1{
++fr[$1]
地图[$1][fr[$1]]=$0
下一个
}
每平方英尺1美元{
对于(地图中的i[$1])
map[$1][i]=map[$1][i]OFS$2
}
结束{
(我在地图上)
对于(图[i]中的j)
打印地图[i][j]
}'文件1文件2文件3

使用
gnu awk
可以执行以下操作:

awk'BEGIN{FS=OFS=“;”}
ARGIND==1{
++fr[$1]
地图[$1][fr[$1]]=$0
下一个
}
每平方英尺1美元{
对于(地图中的i[$1])
map[$1][i]=map[$1][i]OFS$2
}
结束{
(我在地图上)
对于(图[i]中的j)
打印地图[i][j]
}'文件1文件2文件3

非常感谢。起初,我在file1(windows剩余)中遇到了一个不需要的字符问题,但在修复后,它工作得非常好,我诱使自己使用附加的join命令,但没有意识到它本身可以进行1对多的join。@LeifhVived每当你有一个大任务要做时,递归通常会出现。谢谢!起初,我在file1(windows剩余)中遇到了一个不需要的字符问题,但在修复了该问题后,我诱使自己使用附加的join命令,而没有意识到它可以自己执行1对多的join。@LeifhVitted每当你有一个大任务要做时,递归通常会出现。
1;FOO;BAR;NU;YES;NO
1;V;V;E;YES;NO
2;F;B;N;NO;NO
3;FOO;NU;BAR;YES;YES
join -t\; file1 file2 | join -t\; - file3
1;FOO;BAR;NU;YES;NO
1;V;V;E;YES;NO
2;F;B;N;NO;NO
3;FOO;NU;BAR;YES;YES