【发布时间】:2016-12-08 19:05:44
【问题描述】:
来自我的两个输入文件: (file1.txt)
a 11-23
b 33-39
c 40-45
d 46-58
& (file2.txt)
33-39
40-42
43-47
51-52
我需要匹配 file1 的第二列中的 file2 值(检查中间范围)并希望输出如下:
b 33-39
c 40-42, 43-45
d 46-47, 51-52
请注意,'d 46-47, 51-52' 出现在最后一行,因为 file2 中的 43-47 范围属于 c 和 d。
堆栈溢出用户 karakfa,优雅地建议如下方式:
$ join -j 99 file1 file2 |
awk '$2==$3{print $1,$2; next} {split($2,a,"-"); split($3,b,"-")}
a[1]>=b[1] && a[2]<=b[2] || a[1]<=b[1] && a[2]>=b[2] {print $1,$2",",$3}'
输出如下:
b 33-39
c 40-45, 40-42
d 46-58, 51-52
但是,“c 40-45”和“d 46-58”的整个范围值不是我想要的范围,而且我需要它与 GNU Awk 兼容才能在我的 Windows 机器上运行。
【问题讨论】:
-
我怀疑
awk最适合这里的工作.. -
你自己尝试了什么?您是否查看过 awk 文档,是否了解数组的工作原理、如何在数组上创建循环、如何处理多个文件...?
标签: awk