修改awk程序,根据它们的值为序列分配颜色

时间:2012-01-02 14:53:38

标签: awk

我有一个AWK脚本,根据分数对序列进行着色, 它会对RGB模式下的残差进行着色,这些序列可以使用某些软件进行可视化。问题是脚本颜色为红色,分数范围较高,绿色为中等,白色为低范围。我想以某种方式更改它为低范围分配红色,为中间分配蓝色,或者换句话说,我希望脚本以另一种方式工作,从低到高不高到低......我如何处理这个问题。我是一名生物学家,我不知道awk是如何工作的。请帮我解决这个问题。

着色是基于此。 http://www.pymolwiki.org/index.php/Spectrum

/usr/bin/awk -v aa_shift=$2 '

 BEGIN{
      r1=1; g1=1; b1=1;
      r2=1; g2=1; b2=0;
      r3=1; g3=0; b3=0;

   maxfrq=-1*10000;
   minfrq=1*10000;
   aan=0;

   }

   {
       if ($1!="" && $2!="") {
          aan++;
          aa_ind[aan]=1.0*$2;
          aa_frq[aan]=1.0*$3;

  }

  }

END{
for(i=1;i<=aan;i++) {
   if(aa_frq[i]>maxfrq) {
     maxfrq=aa_frq[i];

 }

    if(aa_frq[i]<minfrq) {
      minfrq=aa_frq[i];
 }
}
    half=(maxfrq-minfrq)/2

   for(i=1;i<=aan;i++) {
    aa_frq[i]=aa_frq[i]-minfrq
      if (aa_frq[i]<half) {
      fraction=aa_frq[i]/half
       aa_r[i]=r1+fraction*(r2-r1)
       aa_g[i]=g1+fraction*(g2-g1)
      aa_b[i]=b1+fraction*(b2-b1)
       }      else {
          fraction=(aa_frq[i]-half)/half
        aa_r[i]=r2+fraction*(r3-r2)
             aa_g[i]=g2+fraction*(g3-g2)
             aa_b[i]=b2+fraction*(b3-b2)
       }
     print "set_color c" i ", [" aa_r[i] "," aa_g[i] "," aa_b[i] "]"
     print "color c" i ", resi " aa_ind[i]+aa_shift " and prot"
      }  
      }' $1

脚本使用序列及其得分,例如,得分为53.8的第一个序列A将被涂成红色,而最低得分序列L被着色为白色或任何浅色但我想将它们着色为红色而改变顺序

sequence      no.            score

A             394            53.8314

E             395            12.7202

L             396             4.5191

L             397             22.1270

Q             398             47.6526

提前感谢您宝贵的建议。

1 个答案:

答案 0 :(得分:5)

BEGIN块中的变量控制着色,因此您可以修改这些值以满足您的要求:

  r1=1; g1=1; b1=1;
  r2=1; g2=1; b2=0;
  r3=1; g3=0; b3=0;

如果分数低于平均分数,则颜色将介于[r1, g1, b1][r2, g2, b2]之间。如果它高于平均分,则它将在[r2, g2, b2][r3, g3, b3]之间。该范围的上升或下降取决于得分远离平均得分的程度。

因此,您可以更改这些初始变量以满足您的需求;如果您希望红色为低色,蓝色为中间,绿色为高,请尝试将数字更改为:

  r1=1; g1=0; b1=0;
  r2=0; g2=0; b2=1;
  r3=0; g3=1; b3=0;