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

2022-03-17  本文已影响0人  宗肃書

已有文件如下


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秒,大大节省了我的时间!

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

上一篇下一篇

猜你喜欢

热点阅读