在保留空白的同时复制字段
Copying fields while maintaining whitespace
我有两个文件,一个 (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]=; next}
{print substr([=12=],1,10) sprintf("%-14s", v[FNR]) substr([=12=],25)}
' calc_coord.txt original_coord.txt >updated_coord.txt
如果没有换行等,我什至无法将你的文件传送到 copy/paste,所以未经测试的尝试:
awk '
NR==FNR { saved[NR]=substr([=10=],10,20); next }
{ print substr([=10=],1,5) saved[FNR] substr([=10=],26) }
' calc_coord.txt original_coord.txt
将 substr() arg 数字更改为您要查找的任何数字。
我有两个文件,一个 (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]=; next}
{print substr([=12=],1,10) sprintf("%-14s", v[FNR]) substr([=12=],25)}
' calc_coord.txt original_coord.txt >updated_coord.txt
如果没有换行等,我什至无法将你的文件传送到 copy/paste,所以未经测试的尝试:
awk '
NR==FNR { saved[NR]=substr([=10=],10,20); next }
{ print substr([=10=],1,5) saved[FNR] substr([=10=],26) }
' calc_coord.txt original_coord.txt
将 substr() arg 数字更改为您要查找的任何数字。