linux - 使用 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
在重叠的情况下,我希望放置适合区间的第一个注释。
任何帮助将不胜感激!
解决方案
使用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
第一个块语句将第二个文件的最小值、最大值和注释值存储到数组min
和max
.
第二个块语句循环遍历数组以根据当前行的最大值和最小值查找要打印的注释。如果范围不匹配,NA
则显示字符串。
推荐阅读
- c++ - C ++如何在外部类中声明的内部类中使用变量
- rust - 如何指定默认情况下在 Cargo 工作区的根目录中运行哪个 crate `cargo run`?
- python-3.x - 在 pool.map_async() 检查返回的孩子的数据
- javascript - 即时将凭据更改为代理服务器
- windows - 使用 powershell 启用\禁用本地组策略
- javascript - ngx 翻译 Angular 5
- spring-cloud-dataflow - Spring Cloud Data Flow Local Server + Skipper Server:取消部署流后出错
- javascript - 验证工资输入jQuery
- floating-point - 浮点数据中字母D代表什么
- c# - 超链接中的@@@ @@@ 部分呈现