Awk
根據兩個不同列中的匹配值連接兩個以空格分隔的文件
對於此類問題,我已經嘗試了此站點中提供的各種解決方案,但這些都沒有幫助我。
我有兩個文件(空格分隔,包含列)。這兩個文件包含的記錄數量與我在下面的範例中給出的相同。
讓我將這些列稱為 A、B、C …(這些是列標題。)
文件 1:
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
這是否接近您所需要的(一些格式仍有待完成……)?
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
一個乏味的加入解決方案:首先加入 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