Linux/UNIX Shell:排序日期
时间:2020-01-09 10:42:24 来源:igfitidea点击:
问题描述:如何排序以以下示例格式存储在文本文件中的数据的日期类型:
Code Date TIME HOS05 23/12/2008 10AM HOS06 15/12/2008 2PM HOS62 29/12/2008 10AM HOS64 23/12/2008 2PM HOS70 26/12/2008 10AM ZFT01 06/12/2008 10AM HOS73 11/12/2008 2PM MHOS051 05/12/2008 10AM MHOS041 20/12/2008 2PM MHOS042 27/12/2008 2PM MHOS053 11/12/2008 10AM MHOS043 30/12/2008 2PM
如何明智地对数据进行日期和时间排序?
答:使用sort命令以按排序顺序显示其输入的行。
它具有特殊的选项,称为-M,用于对月份进行排序。
共有3个字段。
第一个是某种代码。
第二个是DD/MM/YYYY格式的实际日期,第三个是时间。
您需要使用sort命令的-k选项对第二列和第三列进行排序,如下所示:
$ sort -k 2,2n -k 3 data.file.txt
输出示例:
MHOS051 05/12/2008 10AM ZFT01 06/12/2008 10AM MHOS053 11/12/2008 10AM HOS73 11/12/2008 2PM HOS06 15/12/2008 2PM MHOS041 20/12/2008 2PM HOS05 23/12/2008 10AM HOS64 23/12/2008 2PM HOS70 26/12/2008 10AM MHOS042 27/12/2008 2PM HOS62 29/12/2008 10AM MHOS043 30/12/2008 2PM
其中:
-k 2,2n -k 3
:使用给定的列号对数据进行排序。选项-k 2,2n -k 3对每一列进行排序。首先,它将对第二列(日期dd字段)进行排序,然后对第三列(时间)进行排序。data.file.txt
:输入文件
多级排序
现在考虑如下数据:
MHOS051 05/12/2008 10AM ZFT01 06/12/2008 10AM MHOS053 11/12/2008 10AM MHOS051 10/01/2009 10AM HOS73 11/12/2008 2PM HOS06 15/12/2008 2PM MHOS041 20/12/2008 2PM HOS05 23/12/2008 10AM HOS64 23/12/2008 2PM MHOS051 12/04/2009 10AM HOS70 26/12/2008 10AM MHOS042 27/12/2008 2PM HOS62 29/12/2008 10AM MHOS051 27/01/2009 10AM MHOS043 30/12/2008 2PM
现在,您需要首先使用F [.C] [OPTS]格式对年份进行排序,然后对日期进行排序,其中F是要使用的字段编号,C是从字段开头开始的第一个字符的编号。
您需要使用sort命令,如下所示:
$ sort -n -k 2.9 -k 2.5 -k 2 data.file.txt
输出示例:
MHOS051 05/12/2008 10AM ZFT01 06/12/2008 10AM HOS73 11/12/2008 2PM MHOS053 11/12/2008 10AM HOS06 15/12/2008 2PM MHOS041 20/12/2008 2PM HOS05 23/12/2008 10AM HOS64 23/12/2008 2PM HOS70 26/12/2008 10AM MHOS042 27/12/2008 2PM HOS62 29/12/2008 10AM MHOS043 30/12/2008 2PM MHOS051 10/01/2009 10AM MHOS051 27/01/2009 10AM MHOS051 12/04/2009 10AM
其中:
- -n:对数字数据进行排序
-k 2.9
:选择第2个字段和第9个字符进行排序(即按年份的最后一位排序)-k 2.5
:选择第二个字段和第五个字符进行排序(即按月的最后一位排序)- -k 2:选择第二个字段并进行排序
- data.file.txt:输入文件