首页 > 解决方案 > 使用 BASH 注释区间

问题描述

我有一个非常大的文本文件,间隔为 500(我们称之为主文件。)它看起来像这样:

Line1 0 500
Line1 500 1000
Line1 1000 1500

我有第二个文件,它在不同的时间间隔有不同的注释(我们称之为辅助文件。)

Annotation1 379 498
Annotation2 1002 1048
....

我想创建第三个文件,用辅助文件注释主文件,看起来像这样:

Line1 0 500 Annotation1
Line1 500 1000  NA
Line1 1000 1500 Annotation2

在重叠的情况下,我希望放置适合区间的第一个注释。

任何帮助将不胜感激!

标签: linuxbashshellawksed

解决方案


使用awk

$ awk 'NR==FNR{
         min[$1]=$2
         max[$1]=$3 
         next
       }{
         for(i in min){
           if($2<=min[i] && $3>=max[i]){
             print $0,i 
             next
           }
         } 
         print $0,"NA"
       }' file2 file1
Line1 0 500 Annotation1
Line1 500 1000 NA
Line1 1000 1500 Annotation2

第一个块语句将第二个文件的最小值、最大值和注释值存储到数组minmax.

第二个块语句循环遍历数组以根据当前行的最大值和最小值查找要打印的注释。如果范围不匹配,NA则显示字符串。


推荐阅读