Text-Processing
刪除bash中第一列中重複的行
我有一個製表符分隔的 .txt 文件,並且想要刪除在第一列中有重複的行。如果這可以在沒有排序的情況下完成,那將是驚人的,但我已經同意我必須使用排序。如果我使用排序,標題無法排序,它必須保持在頂部。
測試數據集,(製表符分隔):
Symbol ATCACGACAGACAGGT.1 ATCACGACAGCCTATA.1 TTTGTCATCATGTCTT.1 STPG1 0 1 3 NFYA 0 0 1 STPG1 1 3 1 ABD 0 0 0 ABC 0 0 0
我的夢想輸出:
Symbol ATCACGACAGACAGGT.1 ATCACGACAGCCTATA.1 TTTGTCATCATGTCTT.1 STPG1 0 1 3 NFYA 0 0 1 ABD 0 0 0 ABC 0 0 0
我的下一個最佳輸出:
Symbol ATCACGACAGACAGGT.1 ATCACGACAGCCTATA.1 TTTGTCATCATGTCTT.1 ABC 0 0 0 ABD 0 0 0 NFYA 0 0 1 STPG1 0 1 3
我設法在逗號分隔的測試樣本 testc.txt 上使用了以下程式碼,但標題仍在排序中。我似乎無法找到一種方法來分配一個有效的製表符分隔符?此外,此程式碼中的標頭也有問題:
sort -u -t, -k1,1 testc.txt
也許我應該澄清一下,我不知道我的真實數據集中的行數、列數或行名是什麼。
你可以
awk
在這裡使用:$ awk -F'\t' 'NR==1 || !seen[$1]++' ip.txt Symbol ATCACGACAGACAGGT.1 ATCACGACAGCCTATA.1 TTTGTCATCATGTCTT.1 STPG1 0 1 3 NFYA 0 0 1 ABD 0 0 0 ABC 0 0 0
-F'\t'
將製表符指定為分隔符NR==1
保留標題(儘管對於給定的輸入,這不是必需的) - NR 是一個特殊變數,將具有目前行號!seen[$1]++
在這裡,seen
數組將使用第一個欄位作為鍵,如果該值為零(第一次看到鍵),則條件將變為真