对grep的时间戳进行排序输出

时间:2013-04-05 05:46:19

标签: sorting grep

我的文件看起来像这样。

[2013] [ a] INFO : [handleMessage] Handling messages ...

[2013] [ b] INFO : [handleMessage] The message received is: [OS     OS-EVNTSVR0-H                 20130404125956465000RFST  M430   F                   ]
[2013] [ c] INFO : [handleMessage] Complete handling message.

[2013] [ a] INFO : [handleMessage] Handling messages ...

[2013] [ b] INFO : [handleMessage] The message received is: [OS     OS-EVNTSVR0-H                 20130404135956465000RFST  M430   F                   ]

[2013] [ c] INFO : [handleMessage] Complete handling message.

我想只捕获收到的消息。 (我已经做过了) 捕获消息后,我必须使用第三列中的时间戳值对其进行排序。但它最终包含一些字符。 (例如:对于上述文件20130404125956465000RFST和20130404135956465000RFST)

我收到很多这样的消息,我使用这个命令。

gzgrep 'The message received is:' Receiver.log.2013-04-04*.gz | cut -d"[" -f5 | sort -t -n -k3

但由于后缀字符,使用数字排序将不起作用。任何人都可以帮助我这个排序部分。需要按时间戳值排序。

2 个答案:

答案 0 :(得分:1)

使用sort -nk3.18排除字段3中的最后4个字符。

来自man sort

  

-k, - key = KEYDEF通过键排序; KEYDEF给出位置和类型

     

KEYDEF是开始和停止位置的F [.C] [OPTS] [,F [.C] [OPTS]],其中F是字段编号,C是字符位置   领域;两者都是ori-          杜松子酒1,停止位置默认为线的结束。如果-t和-b都不起作用,则字段中的字符将从中计算   一开始          前面的空格。 OPTS是一个或多个单字母排序选项[bdfgiMhnRrV],它覆盖全局   订购选项          键。如果没有给出密钥,请使用整行作为密钥。 ë

答案 1 :(得分:0)

$ cat test.log.gz
[2013] [ a] INFO : [handleMessage] Handling messages ...
[2013] [ b] INFO : [handleMessage] The message received is: [OS     OS-EVNTSVR0-H                 20130404125956465000RFST  M430   F               ]
[2013] [ c] INFO : [handleMessage] Complete handling message.
[2013] [ a] INFO : [handleMessage] Handling messages ...
[2013] [ b] INFO : [handleMessage] The message received is: [OS     OS-EVNTSVR0-H                 20130404135956465000RFST  M430   F               ]
[2013] [ c] INFO : [handleMessage] Complete handling message.

$ zcat test.log.gz | perl -ne 'if (/The message received is:/) { push @a, ($_ =~ /\b(\d{20})[A-Z]{4}\b/) } }{ print join "\n", sort @a' | sort
20130404125956465000
20130404135956465000

这是有效的如果您的时间戳是单独的单词和20 digits + 4 upperspace characters形式(您可能需要调整正则表达式)。这样做你想要的吗?