使用条件保持 pdb 文件的格式
Keeping format of a pdb file with conditionals
我是 awk 的新手,如果第 1 列有单词 HETATM,我正在尝试修改第 3 列(关于 NR 的编号)。
我的输入文件是:
HETATM 25 O UNL 1 86.047 83.059 103.165 1.00 0.00 O
HETATM 26 N UNL 1 87.071 82.457 102.433 1.00 0.00 N
HETATM 27 C UNL 1 91.764 77.729 97.523 1.00 0.00 C
HETATM 28 O UNL 1 92.740 78.174 98.137 1.00 0.00 O
HETATM 29 H UNL 1 90.477 80.552 97.677 1.00 0.00 H
CONECT 1 2
CONECT 2 1 3
CONECT 3 2 4 7
我想要的输出是:
HETATM 25 O25 UNL 1 86.047 83.059 103.165 1.00 0.00 O
HETATM 26 N26 UNL 1 87.071 82.457 102.433 1.00 0.00 N
HETATM 27 C27 UNL 1 91.764 77.729 97.523 1.00 0.00 C
HETATM 28 O28 UNL 1 92.740 78.174 98.137 1.00 0.00 O
HETATM 29 H29 UNL 1 90.477 80.552 97.677 1.00 0.00 H
CONECT 1 2
CONECT 2 1 3
CONECT 3 2 4 7
我正在使用此命令来维护文件的格式,但我做不到。你能帮帮我吗?
awk 'BEGIN{FS=OFS="\t";}{if(=="HETATM"){=NR};print [=12=]}' file.pdb
非常感谢。
使用任何 sed:
$ sed 's/^HETATM *\([^ ]*\) *[^ ]*/&/' file
HETATM 25 O25 UNL 1 86.047 83.059 103.165 1.00 0.00 O
HETATM 26 N26 UNL 1 87.071 82.457 102.433 1.00 0.00 N
HETATM 27 C27 UNL 1 91.764 77.729 97.523 1.00 0.00 C
HETATM 28 O28 UNL 1 92.740 78.174 98.137 1.00 0.00 O
HETATM 29 H29 UNL 1 90.477 80.552 97.677 1.00 0.00 H
CONECT 1 2
CONECT 2 1 3
CONECT 3 2 4 7
原回答:
假设您的输入确实如您在脚本中所指示的那样以制表符分隔,那么您非常非常接近:
$ awk 'BEGIN{FS=OFS="\t"} =="HETATM"{= } 1' file
HETATM 25 O25 UNL 1 86.047 83.059 103.165 1.00 0.00 O
HETATM 26 N26 UNL 1 87.071 82.457 102.433 1.00 0.00 N
HETATM 27 C27 UNL 1 91.764 77.729 97.523 1.00 0.00 C
HETATM 28 O28 UNL 1 92.740 78.174 98.137 1.00 0.00 O
HETATM 29 H29 UNL 1 90.477 80.552 97.677 1.00 0.00 H
CONECT 1 2
CONECT 2 1 3
CONECT 3 2 4 7
我是 awk 的新手,如果第 1 列有单词 HETATM,我正在尝试修改第 3 列(关于 NR 的编号)。
我的输入文件是:
HETATM 25 O UNL 1 86.047 83.059 103.165 1.00 0.00 O
HETATM 26 N UNL 1 87.071 82.457 102.433 1.00 0.00 N
HETATM 27 C UNL 1 91.764 77.729 97.523 1.00 0.00 C
HETATM 28 O UNL 1 92.740 78.174 98.137 1.00 0.00 O
HETATM 29 H UNL 1 90.477 80.552 97.677 1.00 0.00 H
CONECT 1 2
CONECT 2 1 3
CONECT 3 2 4 7
我想要的输出是:
HETATM 25 O25 UNL 1 86.047 83.059 103.165 1.00 0.00 O
HETATM 26 N26 UNL 1 87.071 82.457 102.433 1.00 0.00 N
HETATM 27 C27 UNL 1 91.764 77.729 97.523 1.00 0.00 C
HETATM 28 O28 UNL 1 92.740 78.174 98.137 1.00 0.00 O
HETATM 29 H29 UNL 1 90.477 80.552 97.677 1.00 0.00 H
CONECT 1 2
CONECT 2 1 3
CONECT 3 2 4 7
我正在使用此命令来维护文件的格式,但我做不到。你能帮帮我吗?
awk 'BEGIN{FS=OFS="\t";}{if(=="HETATM"){=NR};print [=12=]}' file.pdb
非常感谢。
使用任何 sed:
$ sed 's/^HETATM *\([^ ]*\) *[^ ]*/&/' file
HETATM 25 O25 UNL 1 86.047 83.059 103.165 1.00 0.00 O
HETATM 26 N26 UNL 1 87.071 82.457 102.433 1.00 0.00 N
HETATM 27 C27 UNL 1 91.764 77.729 97.523 1.00 0.00 C
HETATM 28 O28 UNL 1 92.740 78.174 98.137 1.00 0.00 O
HETATM 29 H29 UNL 1 90.477 80.552 97.677 1.00 0.00 H
CONECT 1 2
CONECT 2 1 3
CONECT 3 2 4 7
原回答:
假设您的输入确实如您在脚本中所指示的那样以制表符分隔,那么您非常非常接近:
$ awk 'BEGIN{FS=OFS="\t"} =="HETATM"{= } 1' file
HETATM 25 O25 UNL 1 86.047 83.059 103.165 1.00 0.00 O
HETATM 26 N26 UNL 1 87.071 82.457 102.433 1.00 0.00 N
HETATM 27 C27 UNL 1 91.764 77.729 97.523 1.00 0.00 C
HETATM 28 O28 UNL 1 92.740 78.174 98.137 1.00 0.00 O
HETATM 29 H29 UNL 1 90.477 80.552 97.677 1.00 0.00 H
CONECT 1 2
CONECT 2 1 3
CONECT 3 2 4 7