0

私のファイルは次のようになります。

[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.

受信したメッセージだけをキャプチャしたい。(私はすでに行っています)メッセージをキャプチャした後、3列目のタイムスタンプ値でソートする必要があります。しかし、最後にいくつかの文字が含まれています。(例: 上記のファイル 20130404125956465000RFST および 20130404135956465000RFST の場合)

このようなメッセージをたくさん受け取り、このコマンドを使用しています。

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

ただし、サフィックス文字が原因で、数値による並べ替えは機能しません。誰でもこのソート部分で私を助けてくれますか? タイムスタンプ値でソートする必要があります。

4

2 に答える 2

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(正規表現を微調整する必要がある場合があります)。これはあなたが望むことをしますか?

于 2013-04-05T12:58:03.363 に答える