我有两个文件,一个(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 :(得分: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数字更改为您要查找的内容。