我有两个文件要比较。我找到了如何比较列并根据条件进行打印。我手头的问题是,我必须检查 file1 中的 column[2] 的值是否位于 file2 中定义为两列范围 col [2] col[3] 的值之间。如果这是真的,那么我应该在 file1 中打印文件 2 的列 [4]。
file1:
scaffold1_size11 12
scaffold2_size22 26
scaffold3_size33 67
file2:
scaffold1_size11 1 10 Os01
scaffold1_size11 12 20 Os08
scaffold1_size11 29 59 Os07
scaffold2_size22 17 24 Os09
scaffold2_size22 27 38 Os09
scaffold2_size22 39 60 Os10
scaffold2_size22 67 78 Os10
scaffold3_size33 15 27 Os03
scaffold3_size33 29 62 Os08
scaffold3_size33 64 78 Os02
scaffold3_size33 80 98 Os01
期望的输出:
scaffold1_size11 12 Os08
scaffold2_size22 26
scaffold3_size33 67 Os02
这应该怎么做呢?
这是一个可以完成您想要的操作的 shell 脚本。它使用 awk 将 file2 转换为另一个 awk 脚本 (tmp.awk),该脚本又过滤 file1。
awk '{ a[$1] = a[$1] "$2 >= " $2 " && $2 <= " $3 " ? \"" $4 "\" : "; } END { for (i in a) print "$1 == \"" i "\" { print $0 \"\\t\" (" a[i] "\"\"); }"; }' file2 > tmp.awk
awk -f tmp.awk file1
Notes:
- file1 中的重复行会导致输出中出现重复行。如有必要,将结果通过管道传输至
uniq
or sort -u
.
- 此方法基于以下假设:通常 file2 相对较小(与可能较大的 file1 相比);如果不是,那么这种方法的性能可能会很差。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)