2016-04-22 11 views
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 

答えて

1

awkの印刷ステートメントは>又は>>を用いredirected to a fileとすることができます。次の例では、motherfileの列7をメモリに読み込み、保存された列を含めて文字列newのような新しいファイルに書き込みます。

awk 'NR==FNR{a[FNR]=$7;next}{print$0,a[FNR]>"new"FILENAME}' motherfile 
    child1.c child2.c ... 
+0

正常に動作します。ありがとう – alloppp

+1

出力リダイレクションの右側にカッコで囲まれた式が未定義の動作なので、いくつかの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} ''となります。 –

関連する問題