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

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

作者: 宗肃書 | 来源:发表于2022-03-17 10:26 被阅读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秒,大大节省了我的时间!

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

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/dshvdrtx.html