所以,我的最后一个问题不够具体,虽然我更接近了,但我仍然无法以一种有意义的方式加入我的 3 个文本表。现在,更详细地说,它们是:
T1_01 = 表 1
No Object CCmax Vhel cont noise Mag1
001 _P10644 0.816 123.04 2450.3 74.2 15.34
002 Parked -99.900 -99.90 -99.9 -99.9 -99.90
003 _P10569 0.791 146.30 2650.7 75.3 15.50
004 _P10769 0.641 141.49 482.7 30.2 16.42
005 _P10572 0.848 138.15 2161.4 46.3 15.85
T1_02 = 表 2
Fibrel Namel Typel Pivl RAl DECl Magl
001 F1_P10644 P 1 4.89977691 -0.5104696 15.3
002 Parked N 2 4.88965087 -0.4904939 0.0
003 F1_P10569 P 3 4.89642427 -0.5099916 15.5
004 F1_P10769 P 4 4.90643599 -0.5112466 16.4
005 F1_P10572 P 5 4.89644907 -0.5105655 15.8
T1_03 = 表 3
Name RA DEC Imag Fieldname fiber RV eRV
F1_P10644 4.899776910023531 -0.510469633262908 15.34 100606F1red 001 122.47 2.94
F1_P10569 4.896424277974554 -0.509991655454702 15.50 100606F1red 003 145.55 2.72
F1_P10769 4.906435995618358 -0.511246644149622 16.42 100606F1red 004 116.28 12.87
F1_P10572 4.896449076194342 -0.510565529409031 15.85 100606F1red 005 136.15 3.01
我希望的表格输出是:
T1_0123
(加入第 1T1_01
列T1_02
、第 1 列和第 6 列T1_03
)
No Object CCmax Vhel cont noise Mag1 Fibrel Namel Typel Pivl RAl DECl Magl Name RA DEC Imag Fieldname fiber RV eRV
其中第 1 行 =
001 _P10644 0.816 123.04 2450.3 74.2 15.34 001 F1_P10644 P 1 4.89977691 -0.5104696 15.3 F1_P10644 4.899776910023531 -0.510469633262908 15.34 100606F1red 001 122.47 2.94
和线2 =
002 Parked -99.9 -99.9 -99.9 -99.9 -99.9 002 Parked N 2 4.88965087 -0.4904939 0.0 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9
因此 -99.9 被写入与第三个文件不匹配的行中。
现在,如果我跳过标题,我可以加入文件:
join -1 1 -2 1 |awk 'NR != 1' <T1_02 |awk 'NR != 1'<T1_01 >T1_021
join -1 1 -2 6 T1_021 |awk 'NR != 1'<T1_03 >T1_0123
但是,这只打印连接中列出的第一个表的结果,所以我没有得到我需要的所有列。同样,如果我想要所有 3 张桌子,我“可以”做:
paste T1_01 T1_02 T1_03
除了,在这种情况下,我T1_03
将不匹配,因为它缺少几个值。所以我正在寻找的是一种表达方式,例如:
for all i in files T1_01,T1_02,T1_03
if T1_01 $1 == T1_02 $2 == T1_03 $6
# then print T1_01[i] T1_02[i] T1_03[i] \n,
else
# print T1_01[i] T1_02[i] -99.9 (for all blanks)
fi
done
或者相反,使用我上面的 join 语句并打印两个表中的所有行加入,或者可能是某种粘贴 | 加入??不确定最后一个想法,因为我还没有找到任何真正有效的方法。
此外,我可以稍后将 -99.9 放入:
sed -i -e 's/ / 99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9/' T1_0123
而且我也可以手动添加标题,所以主要问题是获得正确的粘贴结果。
希望这次我能更好地表达这个问题,感谢大家帮助新的 bash 用户!