在awk中,搜索当前行的某些特定列

戴维·C。

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

NEIGHBORS OF THE NON-EQUIVALENT ATOMS

N = NUMBER OF NEIGHBORS AT DISTANCE R
ATOM  N     R/ANG      R/AU   NEIGHBORS (ATOM LABELS AND CELL INDICES)
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/ANG1 CA 7 O,这将是2.4055

我创建了以下脚本:search_for_distance.awk

 {if ($0 ~ "NEIGHBORS OF THE NON-EQUIVALENT ATOMS") {FLAG=1}};
 # If the current line of the file begins with that string, we asign it a FLAG=1

    {if (FLAG==1)
            {if ($0 ~ "^   1 CA"){LINE=$0;
            exit}
            }
    };
    # Here I am searching for "1 CA" on each line

 END{VOL=FILENAME;
 # The filename is: "c_FROM_V_273_008245_50_neighbours_SYMREMO.out"
 # My intention is to end up with a new file with 2 columns:
 # "volume" and "distance". 
 # Notice that the filename contains the volume: 273.008245

 gsub("^.*_V_","",VOL);
 gsub("_",".",VOL);
 gsub(".50.neighbours.SYMREMO.out"," ",VOL);
 # Some substitutions to make "c_FROM_V_273_008245_50_neighbours_SYMREMO.out" 
 # to be "273.008245"

 # Up to now the output of running: 
 # search_for_distance.awk -f c_FROM_V_273_008245_50_neighbours_SYMREMO.out
 # is the following:

 # 273.008245     1 CA   1     2.4055     4.5458    7 O    0 0 0

 # So, I need to take LINE and only extract column "4".
 # This is done by a "split" command:

 {split(LINE,array," ")}   

 print VOL,array[4]}

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

 273.008245  2.4055

请注意,脚本正在打印的1st外观1 CA,恰好是1 CA 7O,这是我想要的。

但是现在我需要运行它以搜索许多距离的首次出现...

我想搜索该1 CA 14 O距离的首次出现我只需要将我从行首搜索到的代码的第一位修改为1 CA

 {if ($0 ~ "NEIGHBORS OF THE NON-EQUIVALENT ATOMS") {FLAG=1}};
 # If the current line begins with that string, we asign it a FLAG=1

    {if (FLAG==1)
            {if ($0 ~ "^   1 CA"){LINE=$0;
            exit}
            }
    };

我该如何介绍要搜索的订单1 CA 14 O

就像是

    {if (FLAG==1)
            {if ($0 ~ "/1 CA   && /14 O"){LINE=$0;
            exit}
            }
    };

非常感谢您的帮助

约翰1024

我想在R / ANG中搜索1 CA 7 O的距离,在这种情况下为2.4055

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

查找1 CA 14 O的R / Ang:

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

这个怎么运作

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

    这将选择满足上述四个条件的行。

  • print $4

    对于选定的行,这将打印第四个字段。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从MySQL当前行中获取特定的列值?

使用awk在BASH中的特定列中搜索变量

复制当前行或Sublime Text中的任何特定行

将列总计到SQL中的当前行?

选择当前行中的列(Google 表格脚本)

Pyspark - 使用当前行中的值更新条件列

使用SQL Server当前行中的记录更新列

在新列中串联当前行和后续行

根据不同列中的前一行和同一列的当前行的值生成一个新列,使用 awk

Notepad ++搜索并替换为当前行号

Python3打印不会在某些终端中覆盖当前行

vim-在某些单词后在当前行中插入时间戳?

如何根据Python中的某些条件将当前行与前2行进行比较

试图在 awk 中打印前一行,但似乎打印当前行两次

比较awk中的当前行和下一行

将当前行上的输入对齐到 CSS 中的特定位置

检查下一行中的值,以便将某些规则应用于Python中的当前行

从另一行获取值并根据当前行中包含的特定信息添加到当前行 - 对于整个数据帧

Google表格:查找列中值比当前行大的列中的行

如何在当前行的新列中获取列的前 n 个值的列表?

在python中的STDOUT中清除当前行

用awk在列中打印某些参数

循环遍历列并检查当前行中的值是否与前一行中的值不同

从Pandas列中的当前行值中减去上一行的值

将以下几行内容合并到3列文件中的当前行中

从列中的上一个值减去当前行中其他值的差

在CSV文件的特定列中awk搜索并替换字符串

在DataGrid的PreviewMouseDown事件中获取当前行

Vim中当前行号的对齐