2012-06-15 73 views
2

我用這個命令來基於列一個文件整理工作,並在第一列中移除重複的行:-u不sort命令

sort -t" " -k1 -u 

但它不工作?

+3

-u認爲整條生產線,也不會看只是一個單一的列 –

+0

我怎樣可以刪除重複的線路? – user1436187

+0

如果整行不一樣,只是第一列,你打算如何處理其他行?你想選擇哪條線?第一行? –

回答

5

GNU排序不考慮-u全行其他的回答。它會考慮用於排序的字段。

在你的情況下,你正在排序所有字段爲-k與一個字段號說明哪個字段開始排序。用兩個數字,你也可以指定結束字段。

嘗試:

sort -t" " -k1,1 -u 

這限制了排序僅在第一場和沒有其他排序。只有在該字段纔會檢查唯一性。

要使用@Shawn齊秦的測試文件:

$ cat in.txt 
1 2 3 4 
3 4 4 4 
1 3 4 5 
2 3 4 5 
$ sort -k1,1 -u in.txt 
1 2 3 4 
2 3 4 5 
3 4 4 4 
$ sort -k2,2 -u in.txt 
1 2 3 4 
1 3 4 5 
3 4 4 4 
+0

Spot on。 +1 ... –

0

編輯:我原來的建議使用了一個關聯數組,但後來我看到@Shawn Chin的答案,並意識到我正在過度複雜。下面是使用bash肖恩的解決方案:

while read field1 theRest 
do 
    if [[ $prev != $field1 ]] 
    then 
     echo "$field1 $theRest" 
     prev=$field1 
    fi 
done < <(sort -t" " -k1 gash.txt) 
相關問題