排序使用文本文件的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得到一年的权利,但争夺的一个月和一天。
任何帮助将不胜感激。
答
我会尝试先更改日期格式。
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
你可以显示你得到了什么,结果是VS的例子,你的预期? – FatalError 2014-10-02 19:16:01