1
複数のファイルの最後の列(つまり、child1.c、chil2.c child3)に対して、1つのファイルから1つの列、1つのファイルから1つの列を複数のファイルの末尾に追加する
motherfile
38 WAT1 1 TIP3 OH2 OT -0.834000 15.9994 0
39 WAT1 1 TIP3 H1 HT 0.417000 1.0080 0
40 WAT1 1 TIP3 H2 HT 0.417000 1.0080 0
41 WAT1 2 TIP3 OH2 OT -0.834000 15.9994 0
42 WAT1 2 TIP3 H1 HT 0.417000 1.0080 0
child1.c
O -5.689000 -0.628000 -10.423000
H -6.663000 -0.744000 -10.224000
H -5.166000 -1.340000 -9.957000
O 11.405000 3.612000 1.674000
H 11.331000 4.609000 1.663000
child2.c
O -4.689000 -0.628000 -10.423000
H -5.663000 -0.744000 -10.224000
H -6.166000 -1.340000 -9.957000
O 1.4405000 3.612000 1.674000
H 14.331000 4.609000 1.663000
01)に.Cなど
のように...
私は
awk '{f1 = $0; getline<"motherfile"; print f1, $7}' <child1.c> newchild1.c
が、1つのファイルに列を追加するには、この機能のみを使用することを試みたが、私は多くのファイルに列を載せていきたいと思います。
注意newchild.cはこのようにする必要があります。
O -5.689000 -0.628000 -10.423000 -0.834000
H -6.663000 -0.744000 -10.224000 0.417000
H -5.166000 -1.340000 -9.957000 0.417000
O 11.405000 3.612000 1.674000 -0.834000
H 11.331000 4.609000 1.663000 0.417000
正常に動作します。ありがとう – alloppp
出力リダイレクションの右側にカッコで囲まれた式が未定義の動作なので、いくつかのawkでは失敗します。 'print $ 0、a [FNR]>(" new "FILENAME)の代わりに常に' print $ 0、a [FNR]>を書くべきです。また、GNU awkを使用している場合を除き、入力ファイルを変更するたびに以前の出力ファイルを閉じる()ことで、 "同時ファイルが多すぎます"というエラーを避けることもできます。したがって、堅牢で移植性のあるスクリプトは、次のようになります: '' NR == FNR {a [NR] = $ 7;次へ} FNR == 1 {閉じる(出); out = "new" FILENAME} {print $ 0、a [FNR]> out} ''となります。 –