2012-08-13 108 views
12

我有一個csv文件,其中的字段用「;」分隔。有8個字段,我想排序我的數據的前4列,按遞增順序(首先按列1,然後列2等排序)bash:按前4列對csv文件進行排序

我怎麼能做到這一點從Linux的命令行?

我試着用開放式辦公室,但它只讓我選擇3列。

編輯:在我想對數據進行排序的字段中,三個字段包含帶有數值的字符串,一個字符串。我怎樣才能用sort命令指定呢?

回答

20

嘗試:

sort -t\; -k 1,1n -k 2,2n -k 3,3n -k 4,4n test.txt 

如:

1;2;100;4 
1;2;3;4 
10;1;2;3 
9;1;2;3 

> sort -t\; -k 1,1n -k 2,2n -k 3,3n -k 4,4n temp3 
1;2;3;4 
1;2;100;4 
9;1;2;3 
10;1;2;3 
+0

謝謝。 '1,1n'在這裏的含義是什麼? – 2012-08-13 13:18:03

+0

按數字排序 – Vijay 2012-08-13 13:21:24

+0

噢好的。因此,假設字段3包含字符串,我將執行'-k 3,3d'按字典順序排序,對吧? – 2012-08-13 13:26:01

8

sort -k將允許您定義排序鍵。從man sort

-k, --key=POS1[,POS2] 
     start a key at POS1 (origin 1), end it at POS2 (default end of line). 

所以

$ sort -t\; -k1,4 

應該這樣做。請注意,我已經逃脫了分號,否則shell會將其解釋爲語句結束。

+0

謝謝。 'sort'是否也允許爲每個字段指定是否要按數字或按字母順序排序? (看我最後一次編輯) – 2012-08-13 13:20:22

相關問題