2015-06-30 136 views
-2

我有兩個文件,一個(calc_coord.txt),我需要將x,y,z(字段3,4,5)座標複製到original_coord.txt中。我的問題是我無法保持正確的間距。我需要所有的數字在相同的位置開始(即負號應該是場下每個數字的前面)。複製字段,同時保留空白

(calc_coord.txt):

C   6.0 -9.6300406713 -7.9721184039 0.1185895513 
C   6.0 -0.7745844593 0.1157508364 -6.4312181651 
O   8.0 -0.7886186832 8.3312194003 5.1214418928 
H   1.0 -8.5173944199 -1.0344814844 4.2057188615 
H   1.0 -1.3188019701 -1.9268396739 -3.3069629312 
H   1.0 -2.6875350807 -9.7931820111 -2.1222787934 
H   1.0 -0.9445605850 1.2508093202 1.0754040709 
O   8.0 7.0683517839 -0.7860544158 0.0997975722 
H   1.0 -0.5981284452 3.1733024008 -9.5005808667 
C   6.0 2.0350058476 0.2023241539 -9.0066961578 
H   1.0 2.9345243074 -4.1229157611 9.5464726503 
H   1.0 6.3575306659 0.4164272327 -9.0466036794 
H   1.0 1.7357929841 5.1723014064 9.4397462018 

文件我想複製到座標(original_coord.txt):

@<TRIPOS>ATOM 1 C -1.6300406713 -0.9721184039 0.1185895513 C.3 1 LIG1 0.0000 ***** 2 C -0.7745844593 0.1157508364 -0.4312181651 C.3 1 LIG1 0.0000 ***** 3 O -0.7886186832 1.3312194003 0.1214418928 O.3 1 LIG1 0.0000 ***** 4 H -1.5173944199 -1.0344814844 1.2057188615 H 1 LIG1 0.0000 ***** 5 H -1.3188019701 -1.9268396739 -0.3069629312 H 1 LIG1 0.0000 ***** 6 H -2.6875350807 -0.7931820111 -0.1222787934 H 1 LIG1 0.0000 ***** 7 H -0.9445605850 1.2508093202 1.0754040709 H 1 LIG1 0.0000 ***** 8 O 1.0683517839 -0.7860544158 0.0997975722 O.3 1 LIG1 0.0000 ***** 9 H -0.5981284452 0.1733024008 -1.5005808667 H 1 LIG1 0.0000 ***** 10 C 2.0350058476 0.2023241539 -0.0066961578 C.3 1 LIG1 0.0000 ***** 11 H 2.9345243074 -0.1229157611 0.5464726503 H 1 LIG1 0.0000 ***** 12 H 2.3575306659 0.4164272327 -1.0466036794 H 1 LIG1 0.0000 ***** 13 H 1.7357929841 1.1723014064 0.4397462018 H 1 LIG1 0.0000 *****

當我嘗試用awk,我得到的格式的座標爲:

@<TRIPOS>ATOM 
    1 C -9.6300406713 -7.9721184039 0.1185895513  C.3  1 LIG1 0.0000 ***** 
    2 C -0.7745844593 0.1157508364 -6.4312181651  C.3  1 LIG1 0.0000 ***** 
    3 O -0.7886186832 8.3312194003 5.1214418928  O.3  1 LIG1 0.0000 ***** 
    4 H -8.5173944199 -1.0344814844 4.2057188615  H   1 LIG1 0.0000 ***** 
    5 H -1.3188019701 -1.9268396739 -3.3069629312  H   1 LIG1 0.0000 ***** 
    6 H -2.6875350807 -9.7931820111 -2.1222787934  H   1 LIG1 0.0000 ***** 
    7 H -0.9445605850 1.2508093202 1.0754040709  H   1 LIG1 0.0000 ***** 
    8 O 7.0683517839 -0.7860544158 0.0997975722  O.3  1 LIG1 0.0000 ***** 
    9 H -0.5981284452 3.1733024008 -9.5005808667  H   1 LIG1 0.0000 ***** 
    10 C 2.0350058476 0.2023241539 -9.0066961578  C.3  1 LIG1 0.0000 ***** 
    11 H 2.9345243074 -4.1229157611 9.5464726503  H   1 LIG1 0.0000 ***** 
    12 H 6.3575306659 0.4164272327 -9.0466036794  H   1 LIG1 0.0000 ***** 
    13 H 1.7357929841 5.1723014064 9.4397462018  H   1 LIG1 0.0000 ***** 

正如你所看到的格式化得到了一點當我嘗試覆蓋字段時搞砸了。無論是否存在「 - 」,它都會從相同位置開始打印所有字段。有什麼建議?我一直在使用它來複制這三個字段。謝謝!

awk ' 
    NR==FNR {v[FNR]=$3; next} 
    {print substr($0,1,10) sprintf("%-14s", v[FNR]) substr($0,25)} 
' calc_coord.txt original_coord.txt >updated_coord.txt 
+0

請您詳細說明一下,很難看出您的要求。你到底在拷貝什麼?不期望的間距是多少?因爲它看起來的間隔從第二個文件,這是你的問題的輸入文件..這這些文件是'calc_coord.txt',這是'original_coord.txt'和被'updated_coord.txt'搞砸? – ShellFish

+0

對不起,我試圖更新我的問題,使其更清楚。 – Jkzz

+0

我只需要將original_coord.txt中的字段3,4,5替換爲calc_coord.txt中的字段3,4,5。問題在於格式。我想保持準確的格式在original_coord.txt – Jkzz

回答

1

我甚至不能讓你要複製的文件,而不換行/粘貼等使未經測試的嘗試:

awk ' 
NR==FNR { saved[NR]=substr($0,10,20); next } 
{ print substr($0,1,5) saved[FNR] substr($0,26) } 
' calc_coord.txt original_coord.txt 

變化,無論你正在尋找的SUBSTR()ARG號。

+1

這不正是我想要什麼,我很新的抨擊,感謝您的幫助。 – Jkzz

+0

不客氣。獲取圖書Shell腳本食譜由克里斯·約翰遜和有效的AWK編程,第4版,由阿諾德·羅賓斯。 –

+0

太好了,我會考慮這兩個今天:) – Jkzz