Solaris通过sorting命令根据date和时间sorting文件

我有一些从脚本(在Solaris机器)/ var / tmp / file.txt中创build的列表,下面的列表有4个字段

请告知如何根据以下TIMESTAMP对列表进行sorting(通过sorting命令或其他solaris命令)

例如date和时间15-10-2009 08:29:18应该在15-10-2009 08:29:10之前…等等

file.txt的例子(不是sorting文件)

PHONE_NUMBER TIMESTAMP ID TYPE -------------------- ------------------- ---- -------------- 972544111222 15-10-2009 08:29:18 20 sharp_gx10 33633333333 24-09-2009 16:17:45 20 other_mm_phone 841990000043 08-10-2009 09:04:38 60 other_mm_phone 972541230001 08-10-2009 14:23:48 20 other_mm_phone 

。 。 。 。

我尝试sorting命令,但不清楚为什么file.txt不sorting

 sort -t' ' -k2.7,2.10n -k2.4,2.5n -k2.1,2.2n -k3 /var/tmp/file.txt 

我们得到的结果是:

  5938123456789141 12-10-2009 13:09:22 20 other_phone 5511223322332233 07-03-2012 08:13:43 20 other_phone 888888 10-02-2012 14:13:58 60 LegacyPhone 111111 10-02-2012 14:13:59 60 LegacyPhone 777777 10-02-2012 14:13:59 60 LegacyPhone 999999 16-02-2012 14:07:32 10 other_phone 87654321 11-10-2009 09:39:37 10 other_phone 

 sort -t' ' -k2.7,2.10n -k2.4,2.5n -k2.1,2.2n -k3 

如果你有原始脚本的控制,所以你可以打印date为YYYY-MM-DD,那么它会自然sorting,所以我们不需要在sorting命令中挑选年份,月份和date字段,但可以使用 – k2的方式与我们使用-k3作为时间戳的方式相同。

或者,如果我已经正确计算了固定宽度格式,

 sort -k1.28,1.31n -k1.25,1.26n -k1.22,1.23n -k3 

或者,如果您不使用固定宽度并具有可变空白,则( -b忽略空格,但注意不是-n

 sort -b -k2.7,2.10 -k2.4,2.5 -k2.1,2.2 -k3 

或者只对文件的一部分进行sorting(实际上,只是简单地改变创build这些数据的程序就简单多了):

 (head -2 file; /usr/xpg4/bin/tail -n +3 file |sort -b -k2.7,2.10 -k2.4,2.5 -k2.1,2.2 -k3) 

像这样复杂的情况下,我倾向于创build一个临时的MySQL数据库,让它做sorting或其他过滤。 通常情况下,做一些类似的事情会更容易

 CREATE TABLE temp_sort_table(phone_number VARCHAR(16), timestamp DATETIME, id INT, type VARCHAR(16)) 

或者只是将文本文件中的数据导入到数据库中:

 LOAD DATA INFILE 'file.txt' INTO TABLE temp_sort_table 

那么你可以轻松地做类似的事情

 SELECT * FROM temp_sort_table ORDER BY timestamp DESC; 

当然,你可以通过各种参数来sort命令,或者应用一些awk/Perl/Python voodoo来完成没有数据库的所有工作。 对于复杂的文本文件,在我看来,使用数据库更容易。