Solaris + 使用sort命令根据日期和时间对文件进行排序

Solaris + 使用sort命令根据日期和时间对文件进行排序

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

请建议如何根据以下时间戳对列表进行排序(通过排序命令或其他 solaris 命令)

例如日期和时间 15-10-2009 08:29:18 应该在 15-10-2009 08:29:10 之前...等等

file.txt 示例(未排序文件)

  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

。 。 。 。

我尝试了 sort 命令,但不清楚为什么 file.txt 没有排序

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

答案1

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

如果您可以控制原始脚本,那么您可以将日期打印为 YYYY-MM-DD,然后它会自然排序,因此我们就不需要在排序命令中分开年份、月份和日期字段,而只需使用 -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

或者只对文件的一部分进行排序(实际上,首先修改创建这些数据的程序会容易得多):

(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)

答案2

对于这种复杂的情况,我倾向于创建一个临时的 MySQL 数据库,并让其进行排序或其他过滤。通常,这样做会更简单

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巫术来完成所有这些操作,而无需数据库。在我看来,对于复杂的文本文件,使用数据库更容易。

相关内容