Awk 编辑后保持PDB文件格式。

Awk 编辑后保持PDB文件格式。,awk,formatting,pdb,Awk,Formatting,Pdb,我的xxx.pdb文件如下: ATOM 1910 CB SER 128 45.806 50.621 39.840 1.00 9.36 ATOM 1913 OG SER 128 44.538 51.195 39.571 1.00 9.36 ATOM 1915 C SER 128 45.325 48.172 40.360 1.00 9.36 ATOM 1916 O SER 128

我的xxx.pdb文件如下:

 ATOM   1910  CB  SER   128      45.806  50.621  39.840  1.00  9.36
 ATOM   1913  OG  SER   128      44.538  51.195  39.571  1.00  9.36
 ATOM   1915  C   SER   128      45.325  48.172  40.360  1.00  9.36
 ATOM   1916  O   SER   128      45.368  47.955  39.155  1.00  9.36
 ATOM   1917  N   SER   129      44.953  47.236  41.238  1.00 11.24
 ATOM   1919  CA  SER   129      44.395  45.938  40.826  1.00 11.24
 ATOM   1921  CB  SER   129      44.091  45.053  42.031  1.00 11.24
 ATOM   1924  OG  SER   129      43.483  45.786  43.085  1.00 11.24

当我尝试这段代码时:awk'{if($10
awk'BEGIN{FS=OFS=“\t”;}{if($10if
perl
可以

$ perl -ape 's/\S+(?=\s+\S+$)/1.50/ if $F[-1]<11' xxx.pdb 
 ATOM   1910  CB  SER   128      45.806  50.621  39.840  1.50  9.36
 ATOM   1913  OG  SER   128      44.538  51.195  39.571  1.50  9.36
 ATOM   1915  C   SER   128      45.325  48.172  40.360  1.50  9.36
 ATOM   1916  O   SER   128      45.368  47.955  39.155  1.50  9.36
 ATOM   1917  N   SER   129      44.953  47.236  41.238  1.00 11.24
 ATOM   1919  CA  SER   129      44.395  45.938  40.826  1.00 11.24
 ATOM   1921  CB  SER   129      44.091  45.053  42.031  1.00 11.24
 ATOM   1924  OG  SER   129      43.483  45.786  43.085  1.00 11.24
$perl-ape的s/\s+(?=\s+\s+$)/1.50/如果$F[-1]带有GNU awk for gensub():


$awk'$NF我不确定您想要完成什么,但一般来说,要读取xxx.pdb文件,然后以正确的格式输出一个新的.pdb文件,我会这样做:

    awk '{printf "%4s%7.0f%3s%6s%2s%4.0f%12.3f%8.3f%8.3f%6.2f%7.2f\n", $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11}' < xxx.pdb >> new.pdb
awk'{printf”%4s%7.0f%3s%6s%2s%4.0f%12.3f%8.3f%8.3f%6.2f%7.2f\n“,$1、$2、$3、$4、$5、$6、$7、$8、$9、$10、$11}>new.pdb
(这段代码除了复制外实际上什么都不会做)

如果我想使用一个变量来更改其中一个字段(如第二个字段),它将如下所示:

    VARIABLE=3

    awk -v x=$VARIABLE '{printf "%4s%7.0f%3s%6s%2s%4.0f%12.3f%8.3f%8.3f%6.2f%7.2f\n", $1, ($2 + x), $3, $4, $5, $6, $7, $8, $9, $10, $11}' < xxx.pdb >> new.pdb
变量=3
awk-vx=$VARIABLE'{printf”%4s%7.0f%3s%6s%2s%4.0f%12.3f%8.3f%8.3f%6.2f%7.2f\n“,$1,($2+x),$3,$4,$5,$6,$7,$8,$9,$10,$11}>new

这将在pdb文件的整个第二列中添加3。

字段之间的空白是什么?单个制表符或空白字符序列或每一个或其他字符的任意组合?您的文章在每行开始前是否确实有空白,或者这是一个打字错误?欢迎使用。使用格式化工具使您的文章更具可读性可修改。对代码、日志和错误文本使用
代码阻塞
,并用粗体和斜体突出显示内容
$ awk '$NF<11{$0=gensub(/\S+(\s+\S+)$/,"1.50\\1",1)}1' file
 ATOM   1910  CB  SER   128      45.806  50.621  39.840  1.50  9.36
 ATOM   1913  OG  SER   128      44.538  51.195  39.571  1.50  9.36
 ATOM   1915  C   SER   128      45.325  48.172  40.360  1.50  9.36
 ATOM   1916  O   SER   128      45.368  47.955  39.155  1.50  9.36
 ATOM   1917  N   SER   129      44.953  47.236  41.238  1.00 11.24
 ATOM   1919  CA  SER   129      44.395  45.938  40.826  1.00 11.24
 ATOM   1921  CB  SER   129      44.091  45.053  42.031  1.00 11.24
 ATOM   1924  OG  SER   129      43.483  45.786  43.085  1.00 11.24
    awk '{printf "%4s%7.0f%3s%6s%2s%4.0f%12.3f%8.3f%8.3f%6.2f%7.2f\n", $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11}' < xxx.pdb >> new.pdb
    VARIABLE=3

    awk -v x=$VARIABLE '{printf "%4s%7.0f%3s%6s%2s%4.0f%12.3f%8.3f%8.3f%6.2f%7.2f\n", $1, ($2 + x), $3, $4, $5, $6, $7, $8, $9, $10, $11}' < xxx.pdb >> new.pdb