2014-10-02 88 views
0

我想按日期排序以下文件,最早到最晚的: $ NAME DIA排序使用文本文件的bash排序

# Date,Open,High,Low,Close,Volume,Adj Close 
01-10-2014,169.91,169.98,167.42,167.68,11019000,167.68 
29-04-2014,164.62,165.27,164.49,165.00,4581400,163.40 
17-10-2013,152.11,153.59,152.05,153.48,9916600,150.26 
06-09-2013,149.70,149.97,147.77,149.09,9001900,145.68 
02-11-2012,132.56,132.61,130.47,130.67,5141300,125.01 
01-11-2012,131.02,132.44,130.97,131.98,3807400,126.27 

排序-T- -K3 -k2 -K1 DIA.txt得到一年的權利,但爭奪的一個月和一天。

任何幫助將不勝感激。

+1

你可以顯示你得到了什麼,結果是VS的例子,你的預期? – FatalError 2014-10-02 19:16:01

回答

0

我會嘗試先更改日期格式。

sed -r "s/(..)-(..)-(....)/\\3-\\2-\\1/" DIA.txt | sort 

您也可以在對行進行排序後將其改回。

sed -r "s/(..)-(..)-(....)/\\3-\\2-\\1/" DIA.txt | sort | sed -r "s/(....)-(..)-(..)/\\3-\\2-\\1/" 
1

這似乎產生正確的輸出

sort -s -t- -k3,3 -k2,2 -k1,1 

輸出:

$ sort -s -t- -k3,3 -k2,2 -k1,1 dia.txt 
# Date,Open,High,Low,Close,Volume,Adj Close 
01-11-2012,131.02,132.44,130.97,131.98,3807400,126.27 
02-11-2012,132.56,132.61,130.47,130.67,5141300,125.01 
06-09-2013,149.70,149.97,147.77,149.09,9001900,145.68 
17-10-2013,152.11,153.59,152.05,153.48,9916600,150.26 
29-04-2014,164.62,165.27,164.49,165.00,4581400,163.40 
01-10-2014,169.91,169.98,167.42,167.68,11019000,167.68 
+0

您可能希望包括顯示生成輸出的排序輸出。這次我會爲你做。 – 2014-10-02 19:28:48

0

sort-k標誌只允許指定的兩列,讓按鍵的範圍在排序中使用。在這之前,你想涉及第三列。有一個特殊的語法(以第3列和2排序時排之間的位置)使用一個附加列,以解決關係:

sort -t'-' -k3,2.1 d