我有一组数据如下所示:

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

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

有人知道如何为它构建合适的代码吗?

推荐答案

有了您展示的示例和try ,请try 以下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

105此处使用awkmatch函数,其中使用类似正则表达式的:NK.Chr1:75500000-95000000:([0-9]+)-([0-9]+)[[:space:]]+NG,其中创建2个捕获组,其值进一步存储到名为arr的数组中.然后在match的基础上添加AND条件,如果数字的值(通过删除其中的-)小于或等于3900000,则打印该行.

Linux相关问答推荐

为什么在Linux上STD::SLEEP_FOR(STD::Chrono::Hors::Max())会立即返回?

std::chrono::time_zone 在不同操作系统上不可用

+后移动下一行到当前行

如何查明第三方是否杀死或 destruct 了 C++ 中的程序

使用ansible配置Linux VM使用vmware_vm_shell模块时变成su?

使用 AWK 过滤 Linux 输出

命令应在终端关闭后继续运行

使用 sed 或 awk 在 linux 中将第一行中的一个单词替换为第二行中的另一个单词

如何让 Flutter 用鼠标拖动而不是滚轮滚动? (Linux)

`G++ 4.9.4` 中关于 WEXITSTATUS 的奇怪行为

如果 bash 中已经存在文件名,则创建新文件但添加数字

如何计算列的平均值

如何获取 CPU 使用率

Ubuntu 上 Java 应用程序中的丑陋字体

Linux命令删除.git文件夹以外的所有文件?

rm 没有释放磁盘空间

Linux 上真的没有异步块 I/O 吗?

.NET Core 中的跨平台文件名处理

bash / Makefile中双美元符号的含义是什么?

在tmux中绑定Ctrl+Tab和Ctrl+Shift+Tab