我想替换下面文件中的第二列,但不替换所有行。
我试过这个:
gawk 'BEGIN{a=0} {gsub($2, a++); print $0}' filein > fileout;
但它部分地混淆了一些线条,例如它说TER和END。
Filein看起来像这样:
ATOM 6513 N CYX D 438 6.267 -19.583 33.328 1.00 99.72 N
ATOM 6514 CA CYX D 438 5.026 -19.379 34.078 1.00 99.72 C
ATOM 6515 C CYX D 438 5.441 -19.597 35.520 1.00 99.72 C
ATOM 6516 O CYX D 438 4.662 -19.960 36.400 1.00 99.72 O
ATOM 6517 CB CYX D 438 3.940 -20.381 33.611 1.00 99.72 C
ATOM 6518 SG CYX D 438 3.155 -19.991 32.020 1.00 99.72 S
TER
HETATM 1 C1 L35 900 -11.042 -69.780 -18.443 1.00 0.00 C
HETATM 2 C2 L35 900 -9.989 -68.975 -18.009 1.00 0.00 C
HETATM 3 C3 L35 900 -11.968 -70.232 -17.506 1.00 0.00 C
CONECT 324 1315
CONECT 2005 2938
CONECT 3228 6518
CONECT 3528 4682
CONECT 5373 6190
ENDMDL
END
我希望文件看起来像这样:
ATOM 1 N CYX D 438 6.267 -19.583 33.328 1.00 99.72 N
ATOM 2 CA CYX D 438 5.026 -19.379 34.078 1.00 99.72 C
ATOM 3 C CYX D 438 5.441 -19.597 35.520 1.00 99.72 C
ATOM 4 O CYX D 438 4.662 -19.960 36.400 1.00 99.72 O
ATOM 5 CB CYX D 438 3.940 -20.381 33.611 1.00 99.72 C
ATOM 6 SG CYX D 438 3.155 -19.991 32.020 1.00 99.72 S
TER
HETATM 7 C1 L35 900 -11.042 -69.780 -18.443 1.00 0.00 C
HETATM 8 C2 L35 900 -9.989 -68.975 -18.009 1.00 0.00 C
HETATM 9 C3 L35 900 -11.968 -70.232 -17.506 1.00 0.00 C
CONECT 324 1315
CONECT 2005 2938
CONECT 3228 6518
CONECT 3528 4682
CONECT 5373 6190
ENDMDL
END
答案 0 :(得分:0)
因此,如果您想要查找不包括的字符串(TER,CONECT,ENDML),那么以下内容可能对您有帮助。
awk 'NF>1 && $1 !~ /TER/ && $1 !~ /CONECT/ && $1 !~ /ENDMDL/ && $1 !~ /END/{$2=++a} 1' Input_file
如果您的Input_file有字符串(ENDMDL,END)总是1列条目,那么您可以尝试跟随它。
awk 'NF>1 && $1 !~ /TER/ && $1 !~ /CONECT/{$2=++a} 1' Input_file
我希望这会对你有所帮助。