2013-07-16 34 views
2

我想由兩個不同的列文本排序:如何按2個不同的列進行排序?

aaa5aaaaa 
aaa3azaba 
aaa4aaaaa 
aaa3abaza 

第一屆排序必須只在第4欄,如果有相等數量的體育課在上面的例子中「3」的第二排序必須塔8和如果仍有相同的字符的下一個列必須是9等

我認爲,這將是解決辦法:

%sort i /\%4v\|\%8v/ 

但它不起作用。

輸出:

aaa3abaza 
aaa3azaba 
aaa4aaaaa 
aaa5aaaaa 

預期輸出:

aaa3azaba 
aaa3abaza 
aaa4aaaaa 
aaa5aaaaa 
+0

按第8列對它進行排序,然後再按第4列排序:) –

回答

3

這裏是什麼地方錯了你的嘗試:

  • /pattern/參數內置:sort指定文本跳過;你顯然試圖匹配某些列。
  • \%v原子零寬度,所以你可能需要追加.,使其字符匹配(這是否會盡管第一點工作)。
  • 我不認爲有一種方法可以根據內置的:sort指定多個搜索關鍵字(即您的角色位置4和8)。

如果有GNU排序安裝(即Linux系統或通過Cygwin),可以使用該外部命令:

:%!sort -k1.4,1.4 -k1.8,1.8 

這指定兩個字符列4和8的偏移量第一個字段(1.)作爲排序鍵。

+0

非常好!是的,我安裝了GNU Sort。你知道在哪裏可以找到有關偏移值的更多信息嗎?體育如果我只想在第4列和第8列以及(> = 8)之後進行排序,偏移值是多少?我還沒有發現如何排序一列p.e.山坳。 4正常,第8列反向... – Reman

+0

對於> =一列,只是放棄第二個',1.x'值;追加'r'進行反向排序。 [man sort](http://linux.die.net/man/1/sort)是否涵蓋了所有的信息,並且在SO上有'sort'的幾個問題。 –

2

這一行:

sor /\%7v/|sor n /\%3v/ 

作品的例子。

它執行兩個排序,首先按col8排序,然後按col4排序(如數字)。

+1

請注意,這取決於':sort'是一個穩定的排序,'有關排序的細節取決於所使用的庫函數。無法保證排序「穩定」或遵從當前的語言環境。「 (來自':h:sort') – pandubear

相關問題