2011-03-05 11 views
16

我有一個文件,可以說 「大文件」,用以下形式的表格數據,如何使用內置的「排序」程序同時對兩個字段(一個數字,一個字符串)進行排序?

A1 B2 A3 1
B1 A2 C3 0
...等等。

我想在我的Linux機器上使用內置的「sort」程序,以便按照第四個字段(數字)對第一個字段進行排序,然後同時對第一個字段進行排序。我通過手冊頁去了幾次,所有我能想出是,

sort -n -k4,4 -k1,1 bigfile 

有沒有一種方法,使「排序」做什麼,我想還是我寫我自己的自定義程序?

謝謝。

+0

-k4有什麼問題? – Orbit

+0

這不起作用? – Zimbabao

+3

@Orbit,我相信'-k4'只是在第4列啓動一個密鑰。但是密鑰的末尾沒有指定,因此密鑰一直到最後。因此,'-k4 -k1'確實是更像'-k4 -k5 -k6 -k7 -k1'的東西,因此'-k1'有點意義。 (是的,這實際上是違反直覺的,但基本上你應該每個領域都應該使用'-kX,X' –

回答

27

從手冊頁:

POS是F [.C] [OPTS],其中F是 場號和C在該領域的字符 位置;兩者都是來源 1.如果-t和-b都不起作用,則字段中的 字符將從前面的 空白的起始處的 開始計數。 OPTS是一個或多個 單字母訂購選項, ,它們覆蓋該密鑰的全球訂購選項 。如果沒有給出密鑰,則使用整個行的密鑰 作爲密鑰。

sort -k4,4n -k1,1 bigfile應該這樣做。

另一種選擇是sort -k1,1 bigfile | sort --stable -n -k4,4穩定排序意味着第4個字段上的關係由初始位置解決,初始位置由第一個排序設置爲第一個字段。

+2

是的。 – Vijay

相關問題