簡體   English   中英

gawk替換列和增量,但不適用於所有行

[英]gawk replace column and increment but not for all lines

我想替換下面文件中的第二列,但不能替換所有行。

我試過了: gawk 'BEGIN{a=0} {gsub($2, a++); print $0}' filein > fileout; 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

因此,如果您要查找不包含在內的字符串(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

我希望這可以幫助你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM