根据最后一列值去除冗余线路 [英] removal of redundant lines based on value in last column

查看:97
本文介绍了根据最后一列值去除冗余线路的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想从我的制表符分隔的文件,它看起来像这样删除冗余数据

  CHR1 1841 1851年4
1991年CHR1 2001年3
CHR1 2491 2501 2
CHR1 2491 2501 2
CHR1 2501 2511 1
CHR1 2681 2691 3
CHR1 2881 2891 4
CHR1 2891 2901 1
CHR1 3241 3251 1
CHR1 3241 3251 6

条件是:如果前三列相同则在第四列(最高值)的值应该被用来获取第三列,也将第四列。如果出现平局然后仅一次在4列中的值应被打印。

所以,对上面输入理想的输出应

  CHR1 1841 1851年4
1991年CHR1 2001年3
CHR1 2491 2501 2
CHR1 2501 2511 1
CHR1 2681 2691 3
CHR1 2881 2891 4
CHR1 2891 2901 1
CHR1 3241 3251 6

我是如何处理:

第一个排序的文件,然后我把事情搞糟了。

 排序文件| awk的-F'\\ t''NR == 1 {最后= $ 1;最大= 0} {如果(最后= $ 1!){printf的%S \\ t%E \\ n,最后,最大值;最后= $ 1;最大= $ 4}否则如果(MAX< $ 4)最大值= $ 4} END {printf的%S \\ t%E \\ n,最后,最大}

请帮助


解决方案

  $排序-k1 -k2,3n -k4nr文件| AWK'!一个[$ 1,$ 2,$ 3] ++'
CHR1 1841 1851年4
1991年CHR1 2001年3
CHR1 2491 2501 2
CHR1 2501 2511 1
CHR1 2681 2691 3
CHR1 2881 2891 4
CHR1 2891 2901 1
CHR1 3241 3251 6

I am trying to remove redundant data from my tab delimited file, which looks like this

chr1    1841    1851    4
chr1    1991    2001    3
chr1    2491    2501    2
chr1    2491    2501    2
chr1    2501    2511    1
chr1    2681    2691    3
chr1    2881    2891    4
chr1    2891    2901    1
chr1    3241    3251    1
chr1    3241    3251    6

Condition is: if first three columns are same then the value in the fourth column (highest value) should be used to get the first three columns and also the fourth column. If there is a tie then only once the value in 4 columns should be printed.

So for the above input the ideal output should be

chr1    1841    1851    4
chr1    1991    2001    3
chr1    2491    2501    2
chr1    2501    2511    1
chr1    2681    2691    3
chr1    2881    2891    4
chr1    2891    2901    1
chr1    3241    3251    6

How I approached:

sorted the file first and then I messed it

sort file | awk -F '\t' 'NR==1{last = $1; max = 0} {if (last != $1) {printf "%s\t%e\n", last, max; last = $1; max = $4} else if (max < $4) max = $4} END{printf "%s\t%e\n", last, max}'

Kindly help

解决方案

$ sort -k1 -k2,3n -k4nr file | awk '!a[$1,$2,$3]++'
chr1    1841    1851    4
chr1    1991    2001    3
chr1    2491    2501    2
chr1    2501    2511    1
chr1    2681    2691    3
chr1    2881    2891    4
chr1    2891    2901    1
chr1    3241    3251    6

这篇关于根据最后一列值去除冗余线路的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆