已有文件如下
我的需求是:
1.在同一个染色体上(第一列相同),如果第二列的第一行和第二行相同,那么就取第三列中数值最大的那一行输出;
2.在同一个染色体上(第一列相同),如果第三列的第一行和第二行相同,那么就取第二列中数值最小的那一行输出;
文件背景:已经按照第一列和第二列升序排序过
总之,我的目的是为了取到一个相邻区域内的最大区间
- 左思右想,想到一个办法,如下面的代码所示:
tac xpehh-fst.bed|awk '!i[$2]++'>1.tmp #降序,为了获得我的需求1的文件,因为如果上下两行相同,默认输出第一行的数据,所以这里把第一行的第三列调整为最大的,即降序排列
tac 1.tmp|awk '!i[$3]++' >xpehh-fst.final.bed ##升序,为了获得我的需求2的文件,所以这里把第一行的第二列调整为最小的,即升序排列
最后得到的结果如下
文件已经从2180行降到了893行,整个命令运行不到3秒,大大节省了我的时间!
总结来说,虽然没用到高级语言,但是思考还是第一生产力。