排序使用文本文件的bash排序

问题描述:

我想按日期排序以下文件,最早到最晚的: $ 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

我会尝试先更改日期格式。

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

您也可以在对行进行排序后将其改回。

sed -r "s/(..)-(..)-(....)/\\3-\\2-\\1/" DIA.txt | sort | sed -r "s/(....)-(..)-(..)/\\3-\\2-\\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

sort-k标志只允许指定的两列,让按键的范围在排序中使用。在这之前,你想涉及第三列。有一个特殊的语法(以第3列和2排序时排之间的位置)使用一个附加列,以解决关系:

sort -t'-' -k3,2.1 d