两列数据中一列数据相同,如何取出来使区间最大的一行数据?

已有文件如下


image.png

我的需求是:
1.在同一个染色体上(第一列相同),如果第二列的第一行和第二行相同,那么就取第三列中数值最大的那一行输出;
2.在同一个染色体上(第一列相同),如果第三列的第一行和第二行相同,那么就取第二列中数值最小的那一行输出;
文件背景:已经按照第一列和第二列升序排序过
总之,我的目的是为了取到一个相邻区域内的最大区间

  • 左思右想,想到一个办法,如下面的代码所示:
tac xpehh-fst.bed|awk '!i[$2]++'>1.tmp   #降序,为了获得我的需求1的文件,因为如果上下两行相同,默认输出第一行的数据,所以这里把第一行的第三列调整为最大的,即降序排列
tac 1.tmp|awk '!i[$3]++' >xpehh-fst.final.bed  ##升序,为了获得我的需求2的文件,所以这里把第一行的第二列调整为最小的,即升序排列

最后得到的结果如下

image.png

文件已经从2180行降到了893行,整个命令运行不到3秒,大大节省了我的时间!

总结来说,虽然没用到高级语言,但是思考还是第一生产力。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容