阅读后:
Combine two files with unequal length on common column with multiple matches with linux command line
我想知道您将如何进行完全外部联接。 (希望可以用它开始一个新的问题)
提交一个
fig, ax = plt.subplots(figsize=(10,8))
plot_importance(model, ax=ax)
提交两个文件
ax = plot_importance(model)
ax.figure.set_size_inches(10,8)
提交三个
A 1
C 4
结果将是:
A 2
B 5
是否有像我看到的用于左外部连接的A 7
D 9
一线解决方案?
答案 0 :(得分:0)
使用GNU awk生成真正的多维数组,ARGIND和sorted_in:
$ cat tst.awk
{ vals[$1][ARGIND] = $2 }
END {
PROCINFO["sorted_in"] = "@ind_str_asc"
for (key in vals) {
printf "%s%s", key, OFS
for (fileNr=1; fileNr<=ARGIND; fileNr++) {
val = (fileNr in vals[key] ? vals[key][fileNr] : "N")
printf "%s%s", val, (fileNr<ARGIND ? OFS : ORS)
}
}
}
$ awk -f tst.awk file1 file2 file3
A 1 2 7
B N 5 N
C 4 N N
D N N 9
答案 1 :(得分:0)
可以使用 POSIX 标准 join
命令解决此问题。鉴于问题中提出的三个文件名为 1.txt
、2.txt
和 3.txt
:
join -a1 -a2 -eN -o 0,1.2,2.2 1.txt 2.txt | join -a1 -a2 -eN -o 0,1.2,1.3,2.2 - 3.txt
请注意,虽然这为上述问题提供了所需的输出,但与 Ed Morton 基于 awk
的解决方案相比,它的灵活性要低得多。一方面,join
需要根据共享字段对其输入文件进行排序。另一方面,它仅适用于三个输入文件。
但是,在一次性的临时情况下使用 join
可能更简单!