[英]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.