我有一個巨大的表,包含數十萬行和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) –