本文介绍了在awk中,搜索CURENT线一定的列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个名为 c_FROM_V_273_008245_50_neighbours_SYMREMO.out ,看起来像:

 非等效原子NEIGHBORSN =表示邻居数目距离r
氢原子n R / ANG R / AU NEIGHBORS(ATOM标签及细胞指数)
1 CA 1 2.4055 4.5458 7 O 0 0 0
1 CA 1 2.4058 4.5463 10 O 0-1 0
1 CA 1 2.4356 4.6026 14 O 0 0 0



如果我想在搜索距离 R / ANG 1 CA 7 O ,这将是 2.4055

我创造了这个脚本: search_for_distance.awk

  {如果($ 0〜非等效原子邻居){FLAG = 1}};
 #如果该文件的当前行以该字符串开头,我们ASIGN它标志= 1    {如果(FLAG == 1)
            {如果($ 0〜^ 1 CA){LINE = $ 0;
            出口}
            }
    };
    #我在这里每行搜索CA 1 END {VOL​​ =文件名;
 #文件名是:c_FROM_V_273_008245_50_neighbours_SYMREMO.out
 #我的本意是用2列的新文件,以结束:
 #量和距离。
 #注意文件名中包含音量:273.008245 GSUB(^ * _ V _。,,VOL);
 GSUB(_,VOL。);
 GSUB(。50.neighbours.SYMREMO.out,,VOL);
 #有些换人做c_FROM_V_273_008245_50_neighbours_SYMREMO.out
 #是273.008245 #截至目前运行的输出:
 #search_for_distance.awk -f c_FROM_V_273_008245_50_neighbours_SYMREMO.out
 #如下: #273.008245 1 CA 1 2.4055 4.5458 7 O 0 0 0 #所以,我需要采取LINE和只能提取列4。
 #这是由拆分命令来完成: {分割(LINE,数组,)} 打印VOL,数组[4]}

运行的输出:
search_for_distance.awk -f c_FROM_V_273_008245_50_neighbours_SYMREMO.out
如下:

  273.008245 2.4055

注意,脚本印刷 1 CA ,这恰好是 1 CA 70 1日亮相,这就是我想要的。

但现在我需要为搜索第一appearence许多距离运行此...

我想搜索 1 CA 14 O 距离的首次亮相。
我只需要修改code,其中我从行开始搜索以 1 CA 的第一位:

  {如果($ 0〜非等效原子邻居){FLAG = 1}};
 #如果当前行以该字符串开头,我们ASIGN它标志= 1    {如果(FLAG == 1)
            {如果($ 0〜^ 1 CA){LINE = $ 0;
            出口}
            }
    };

我怎么能引入一个以搜索 1 CA 14 O

的东西

  {如果(FLAG == 1)
            {如果($ 0〜/ 1 CA&安培;&安培; / 14 O){LINE = $ 0;
            出口}
            }
    };

非常感谢你的帮助。


解决方案
$ awk '$1==1 && $2=="CA" && $6==7 && $7=="O" {print $4}' file
2.4055

To find R/Ang for 1 CA 14 O:

$ awk '$1==1 && $2=="CA" && $6==14 && $7=="O" {print $4}' file
2.4356

How it works

  • $1==1 && $2=="CA" && $6==7 && $8==0

    This selects lines for which the four stated conditions are true.

  • print $4

    For the selected lines, this prints the fourth field.

这篇关于在awk中,搜索CURENT线一定的列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-13 23:57