如何对包含日期的列进行多列排序?

如何对包含日期的列进行多列排序?

我正在尝试按以下方式对文件进行排序,该文件具有多个列,以逗号分隔,其中一列的日期采用以下格式 mm/dd/yyyy。

$cat 文件名

AN1143,45.7,03/05/2012,
H9477,45.3,01/15/2010,
DN1222,45.1,03/05/1800,
J960,26.7,06/02,1990,
Z959,28.2,03/21/2016,
H12421,27.7,06/21/2000

我的目的是首先根据第一列进行排序,然后根据具有日期的第三列进行排序。我尝试了以下命令:

sort -t"," -k1,1 -k3,9n.3,10n -k3,1n.3,2n -k3,4n.3,5n filename 

但我遇到了这个错误,感谢任何解释帮助。

排序:字段规范中的杂散字符:无效的字段规范“3,9n.3,10n”

答案1

试试这个:

sort -t, -k1,1 -k3.7n -k3.1,3.2n -k3.4,3.5n < filename
  • 不需要引用逗号分隔符
  • 第一个排序键定义使用列 1
  • 第二个排序键定义使用第 3 列的“年份”字段,按数字排序
  • 第三个排序键使用第 3 列的“月”字段,按数字排序
  • 第四个排序键使用第 3 列的“day”字段,按数字排序

使用增强的示例数据文件运行示例,显示排序:

输入:

AN1143,45.7,03/05/2012,
AN1143,45.7,02/05/2012,
AN1143,45.7,03/04/2012,
AN1143,45.7,03/05/2011,
H9477,45.3,01/15/2010,
DN1222,45.1,03/05/1800,
J960,26.7,06/02,1990,
Z959,28.2,03/21/2016,
H12421,27.7,06/21/2000

输出:

AN1143,45.7,03/05/2011,
AN1143,45.7,02/05/2012,
AN1143,45.7,03/04/2012,
AN1143,45.7,03/05/2012,
DN1222,45.1,03/05/1800,
H12421,27.7,06/21/2000
H9477,45.3,01/15/2010,
J960,26.7,06/02,1990,
Z959,28.2,03/21/2016,

相关内容