我有一个20k行的三列表。第1列:基因ID列表(可能有重复的ID)
第二列:常数字符串
第3列:值
我想要的是对我的列表进行排名,只留下唯一的基因ID。对于重复的基因ID,我想只留下得分最高的那些。
这里有一个例子,提前致谢
TMCS09g1008699 ensembl 6.4
TMCS09g1008671 ensembl 6.4
TMCS09g1008672 ensembl 6.5
TMCS09g1008673 ensembl 6
TMCS09g1008674 ensembl 5.4
TMCS09g1008675 ensembl 5.4
TMCS09g1008676 ensembl 4.9
TMCS09g1008677 ensembl 4.6
TMCS09g1008677 ensembl 4.4
TMCS09g1008679 ensembl 4.3
TMCS09g1008680 ensembl 3.9
TMCS09g1008681 ensembl 3.8
TMCS09g1008682 ensembl 3.6
TMCS09g1008683 ensembl 3.5
TMCS09g1008684 ensembl 3.5
TMCS09g1008685 ensembl 3.4
TMCS09g1008686 ensembl 3.4
TMCS09g1008687 ensembl 3.4
TMCS09g1008688 ensembl 3
TMCS09g1008689 ensembl 2.6
TMCS09g1008690 ensembl 2
TMCS09g1008699 ensembl 5.9
答案 0 :(得分:2)
您可以使用k3
:
n
第一个排序按第三列(r
)按降序(Codable
)对文件进行排序({
"status": "success",
"data": {
"time": "00:02:00",
"employees": [
{
"id": 001,
"name": "foo"
},
{
"id": 002,
"name": "bar"
}
]
}
}
),第二个排序根据第一列取消输出
答案 1 :(得分:0)
您能否请关注awk
并告诉我这是否对您有所帮助。
awk '{b[$1]=a[$1]>$NF?b[$1]?b[$1]:$0:$0;a[$1]=a[$1]>$NF?a[$1]:$NF;} END{for(i in a){print b[i]}}' Input_file
现在也添加非单线形式的解决方案。
awk '
{
b[$1]=a[$1]>$NF?b[$1]?b[$1]:$0:$0;
a[$1]=a[$1]>$NF?a[$1]:$NF}
END{
for(i in a){
print b[i]}
}
' Input_file
答案 2 :(得分:0)
您可以使用awk:
这是一种方法:
awk '{ m[$1] = m[$1] > $3 ? m[$1] : $3; } END { for (i in m) print i, "ensembl", m[i] }' file
如果您希望看到按基因ID排序的输出,那么只需将上面的awk传递给sort
。