2016-04-20 15 views
2

bashを使用してUbuntuで作業する。Linux BASH、別のファイルから2行追加する方法

私は2つのファイルを持っています。ファイル1は、原子や空間で自分の位置のリストが含まれており、次のようになります。

Si    1  14 
    24.094049488113697 22.249517320000000 5.4091803780000000 
Si    2  14 
-21.980209241886303 23.466150130000000 -6.4407518510000000 
Si    3  14 
-9.8193586518863060 -13.586795180000000 -14.608877780000000 

このファイルには、すべての原子が説明されるまでになります。

ファイル2はかなり類似していますが、詳細情報が含まれています。名前と場所に加えて、速度と力に関する情報が含まれています。それは次のようになります。

Si    1 
    22.31756370   22.24951732   5.409180378  
    29.0968650481  -12.2276780157  -7.08186598428  
    30498.6028163  -9406.07172249  -27393.4141429  
Si    2 
    -23.75669503   23.46615013  -6.440751851  
    -28.7812217378  31.2316292200  -34.6050775946  
    40272.8675096  -40472.1160399  -1103.73416448  
Si    3 
    -11.59584444  -13.58679518  -14.60887778  
    13.5323597131  42.5618815724  8.79048959706  
    6758.60998012  -9418.56231552  3386.31657511 

私が持っている問題はこれです:ファイル1は正しい座標を持っていますが、(速度と力を)必要とされている情報の残りの部分を持っていません。どのようにして全ての原子から二行(行3 & 4,7 & 8、11 & 12など)を取り、出力は次のように見えるように、対応する原子の座標下にそれらを挿入することができる:

Si    1  14 
    24.094049488113697 22.249517320000000 5.4091803780000000 
    29.0968650481  -12.2276780157  -7.08186598428 
    30498.6028163  -9406.07172249  -27393.4141429  
Si    2  14 
-21.980209241886303 23.466150130000000 -6.4407518510000000 
-28.7812217378  31.2316292200  -34.6050775946  
    40272.8675096  -40472.1160399  -1103.73416448 
Si    3  14 
-9.8193586518863060 -13.586795180000000 -14.608877780000000 
    13.5323597131  42.5618815724  8.79048959706  
    6758.60998012  -9418.56231552  3386.31657511 

(座標は最初のファイルからですが、速度と力が第二1からのもの)

私のアプローチは、ファイル2から2つのたかったファイルを分離した後、最初の座標の下にそれらを追加しようとしましたファイル。残念ながら、私はこれを行う方法を見つけていません。

ありがとうございます。

+1

編集:出力を追加しましたし、私は試した何を語りました遠い – Bdrs

答えて

1
awk 'FNR==NR { getline a[$1$2]; next; } ($1$2 in a){ print $0; print a[$1$2]; getline; getline; print; getline; print }' file1 file2 

説明:

FNR == NRチェック我々は最初のファイルに

そうですか?次の行を配列に保存する

いいえ?私たちは2番目のファイルに入っています。

($ 0)配列にヘッダー行が存在するかどうかを確認します(file1のアトム= file2のアトム)。

はい?すべてのものを:)印刷

入力: FILE1

Si 1 14 
24 22 5 
Si 2 14 
21 23 6 
Si 3 14 
9 13 14 

FILE2

Si 1 
x x x 
y y y 
z z z 
Si 2 
x x x 
y y y 
z z z 
Si 3 
x x x 
y y y 
z z z 

出力:

Si 1 14 
24 22 5 
y y y 
z z z 
Si 2 14 
21 23 6 
y y y 
z z z 
Si 3 14 
9 13 14 
y y y 
z z z 
+0

答えてくれてありがとうございました。 入力したコードを使用して出力を取得できません。 ($ 0 in)-partを削除すると出力が得られますが、2行目から4行目が削除されます。 ので、代わりのX X X Siの14 yはyはyの私が手 のzのz Z : Siの14 yはyはyの zのzのzの – Bdrs

+0

は今、それは:)はありがとうございまし作品! – Bdrs

関連する問題