我有一个巨大的表,包含数十万行和10列。我想根据第4列(ID)删除这些重复项,但同时留下第9列(分数)中具有最高值的那个。删除重复项,但将一个根据排序在不同的列中
我试着在AWK这个简单的代码,但它显然更去除线比它应该和甚至没有采摘的所有副本..
sort -rnk 9 myfile.txt | awk -F"[. ]" '!a[$4]++' >filtered.txt
我会很感激任何意见;我很想在python或perl上使用这个工具,但我并不擅长(尚)。
感谢
我有一个巨大的表,包含数十万行和10列。我想根据第4列(ID)删除这些重复项,但同时留下第9列(分数)中具有最高值的那个。删除重复项,但将一个根据排序在不同的列中
我试着在AWK这个简单的代码,但它显然更去除线比它应该和甚至没有采摘的所有副本..
sort -rnk 9 myfile.txt | awk -F"[. ]" '!a[$4]++' >filtered.txt
我会很感激任何意见;我很想在python或perl上使用这个工具,但我并不擅长(尚)。
感谢
由于输入文件是如此之大,这将是有意义的避免要求awk来存储超过必要的信息,所以假设排序是不是过于缓慢,您不妨考虑排序/ awk程序的以下最优化变异体,至少提供的ID不是空字符串:
sort -t $'\t' -k4,4 -rnk 9,9 | awk -F\\t 'key!=$4 {key=$4; print}'
感谢,它也可以和其他 – Ale
请显示一些示例行。我很好奇你的字段分隔符 –
我无法复制表格。但它的制表符分隔。 – Ale
好吧,如果它是制表符分隔的,你的字段分隔符是错误的。尝试'awk的-F “\ t” 的'和'排序-t $'\ t''(AWK理解2字符串' “\”, “T”'是指一个标签,但排序不 - 你需要给文字标签排序的-t) –