我已经尝试过该网站针对此类问题给出的各种解决方案,但没有一个能帮助我解决。
我有两个文件(以空格分隔,包含列)。这两个文件包含的记录数量与我下面的示例中给出的相同。
让我将这些列称为 A、B、C ...(这些是列标题。)
文件一:
A B C D
-----------
a1 b1 c1 d1
a2 b2 c2 d2
a3 b3 c3 d3
a4 b4 c4 d4
a5 b5 c5 d5
文件2:
E B A F
---------
1 b5 a5 f
2 b2 a2 f
1 a1 b1 f
1 a3 b3 f
2 a4 b4 f
我想生成合并文件:
A B C D E
-------------
a1 b1 c1 d1 1
a2 b2 c2 d2 2
a3 b3 c3 d3 1
a4 b4 c4 d4 2
a5 b5 c5 d5 1
答案1
这是否接近您的需要(仍有一些格式需要完成......)?
awk 'NR == FNR {T[$2,$3] = T[$3,$2] = $1; next} {print $0, T[$1,$2]}' file2 file1
A B C D E
-----------
a1 b1 c1 d1 1
a2 b2 c2 d2 2
a3 b3 c3 d3 1
a4 b4 c4 d4 2
a5 b5 c5 d5 1
答案2
一个繁琐的连接解决方案:首先连接 file1 col 1 和 file2 col2,然后连接 file1 col 1 和 file2 col 3:
{
join -11 -22 -o 0,1.2,1.3,1.4,2.1 <(sed '1,2d' file1 | sort -k1,1) <(sed '1,2d' file2 | sort -k2,2)
join -11 -23 -o 0,1.2,1.3,1.4,2.1 <(sed '1,2d' file1 | sort -k1,1) <(sed '1,2d' file2 | sort -k3,3)
} | sort -k 1,1
输出
a1 b1 c1 d1 1
a2 b2 c2 d2 2
a3 b3 c3 d3 1
a4 b4 c4 d4 2
a5 b5 c5 d5 1