2013-05-14 59 views
3

這比疑問更有疑問。unix排序的問題

所以我有一個這樣的輸入文件:

$ cat test 
class||sw sw-explr bot|results|id,23,0a522b36-556f-4116-b485-adcf132b6cad,20130325,/html/body/div/div[3]/div[2]/div[2]/div[3]/div/div/div/div/div/div[2]/div/div/ul/li[4]/div/img 
class||sw sw-explr bot|results|id,40,30cefa2c-6ebf-485e-b49c-3a612fe3fd73,20130323,/html/body/div/div[3]/div[2]/div[3]/div[3]/div/div/div/div/div[3]/div/div/ul/li[8]/div/img 
class||sw sw-explr bot|results|id,3,72805487-72c3-4173-947f-e5abed6ea1e4,20130324,/html/body/div/div[3]/div[2]/div[2]/div[2]/div/div/div/div/div/div[3]/div/div/div[2]/ul/li[20]/div/img 

在HTML頁面中定義的元素的種類。 可以考慮逗號分隔5列。

我想sort這個文件相對於第二列,即列有23,40,3。

我不知道爲什麼unixsort不起作用。

這些是我試過的問題,令人驚訝的是沒有人給我想要的結果。

cat test | sort -nt',' -k2 

cat test | sort -n -t, -k2 

cat test | sort -n -t$',' -k2 

cat test | sort -t"," -k2 

cat test | sort -n -k2 

有什麼關於sort我不知道嗎?

這並沒有引起我一個問題,因爲我分開的列,排序,然後再次加入。但爲什麼沒有sort工作?

注意: - 如果我刪除此文件的$ 3,然後排序,它工作正常!

回答

4

此行應爲你工作:

sort -t, -n -k2,2 test 
  • 你不需要cat test|sort,只是sort file
  • -k的默認END POS是行結束。所以如果你sort -k2這意味着從第二場直到行結束。事實上,你需要排序確切第二場。這也解釋了爲什麼你的排序工作,如果你刪除第三列。

如果測試你的榜樣:

kent$ sort -t, -n -k2,2 file 
class||sw sw-explr bot|results|id,3,72805487-72c3-4173-947f-e5abed6ea1e4,20130324,/html/body/div/div[3]/div[2]/div[2]/div[2]/div/div/div/div/div/div[3]/div/div/div[2]/ul/li[20]/div/img 
class||sw sw-explr bot|results|id,23,0a522b36-556f-4116-b485-adcf132b6cad,20130325,/html/body/div/div[3]/div[2]/div[2]/div[3]/div/div/div/div/div/div[2]/div/div/ul/li[4]/div/img 
class||sw sw-explr bot|results|id,40,30cefa2c-6ebf-485e-b49c-3a612fe3fd73,20130323,/html/body/div/div[3]/div[2]/div[3]/div[3]/div/div/div/div/div[3]/div/div/ul/li[8]/div/img 
+0

嘿,你能解釋爲什麼其他的'sort'命令即使在別處工作時也不起作用嗎? – rohitkulky 2013-05-14 13:42:48

+0

@rohitvk我補充說明。檢查是否有幫助。 – Kent 2013-05-14 13:47:04

+0

非常感謝!我不知道這一點。將探索更多! – rohitkulky 2013-05-14 13:50:27

2

又來了一個有效的解決方案:

cat test.file | sort -t, -k2n,2 

說明:

-t, # Set field separator to ',' 

-k2n,2 # sort by the second column, numerical 
+1

難道不該'-k2n,2'來排序僅在第二場,而不是從第二場到行的結束? – 2013-05-14 13:39:16

+0

我不認爲這個答案會起作用。 – Kent 2013-05-14 13:40:49

+0

@Kent我已經用示例數據對其進行了測試,但我認爲Frederic是正確的,謝謝! :)(雖然在這種情況下並不重要) – hek2mgl 2013-05-14 13:41:28