繁体   English   中英

如何在 Linux 上使用 -grep 构建命令来过滤间隔

[英]How to build a command to filter an interval using -grep on Linux

我有一组看起来像这样的数据:

NK.Chr1:75500000-95000000:28960-29007   NG-unitig0655   97.872  47  1   0   1   47  121009  120963  2.90e-14    80.6
NK.Chr1:75500000-95000000:28960-29007   NG-1DRT-unitig0549  97.872  47  1   0   1   47  623680  623726  2.90e-14    80.6
NK.Chr1:75500000-95000000:28960-29007   NG-1DRT-unitig0278  97.872  47  1   0   1   47  1224581 1224627 2.90e-14    80.6
NK.Chr1:75500000-95000000:28960-29007   NG-1DRT-Chr4    97.872  47  1   0   1   47  8416368 8416414 2.90e-14    80.6
NK.Chr1:75500000-95000000:28960-29007   NG-1DRT-Chr4    97.872  47  1   0   1   47  20041035    20041081    2.90e-14    80.6
NK.Chr1:75500000-95000000:28960-29007   NG-1DRT-Chr4    97.872  47  1   0   1   47  35175472    35175426    2.90e-14    80.6
NK.Chr1:75500000-95000000:28960-29007   NG-1DRT-Chr4    97.872  47  1   0   1   47  56460095    56460049    2.90e-14    80.6

我需要过滤 0-3900000 范围内的行,只考虑 NG 之前的数字。

grep 'NK.Chr1:75500000-95000000:[0-3900000]' NG.1DRT-blast.out > chr1-blast-NG.txt

我尝试了这段代码,但它返回了所有带有NK.Chr1:75500000-95000000的行,没有考虑范围。

任何人都知道如何为它构建适当的代码?

使用您显示的示例和尝试,请尝试遵循awk代码。 在 GNU awk中编写和测试。

awk 'match($0,/NK.Chr1:75500000-95000000:([0-9]+)-([0-9]+)[[:space:]]+NG/,arr) && (arr[1] arr[2])+0<=3900000' Input_file

说明:在这里使用match function 的awk ,其中使用正则表达式如: NK.Chr1:75500000-95000000:([0-9]+)-([0-9]+)[[:space:]]+NG创建 2 个捕获组,其值将进一步存储到名为 arr 的数组中。 然后如果数字的值(通过删除它们之间的- )小于或等于match ,则添加一个 AND 条件,然后打印该行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM