我尝试按日期排序以下文件,最早到最晚: $ NAME DIA
# 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
sort -t- -k3 -k2 -k1 DIA.txt获得了正确的年份,但却在一个月中昼夜不停。
任何帮助将不胜感激。
答案 0 :(得分: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
答案 1 :(得分: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/"
答案 2 :(得分:0)
sort
&#39; -k
标记仅允许您指定两列,这些列提供要在排序中使用的键范围。在这里你想要涉及第三列。有一种特殊的语法可以使用额外的列来解析关系(在使用第3列和第2列进行排序时,这里是行之间):
sort -t'-' -k3,2.1 d