それで、私の最後の質問は十分に具体的ではありませんでした、そして私はかなり近くにいますが、私はまだ私の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
(列1 T1_01
、列1 T1_02
、および列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
ここで、line1 =
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
およびline2=
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
そのため、3番目のファイルに一致しない行に-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
いくつかの値が欠落しているため、myは一致しません。だから私が探しているのは、次のようなことを言う方法です。
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
または、逆に、上記の結合ステートメントを使用して、結合された両方のテーブルのすべての行を出力するか、ある種の貼り付けを行います。加入??私はまだ実際に機能するものを見つけていないので、その最後のアイデアについてはよくわかりません。
さらに、後で-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ユーザーを支援してくれた皆さんに感謝します。