teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2021/05/28 08:40

投稿

KojiDoi
KojiDoi

スコア13727

answer CHANGED
@@ -4,4 +4,63 @@
4
4
  ```
5
5
  ls -tr /var/log/httpd/accesslog* | \
6
6
  perl -MTime::Piece -le 'print sort {($aa)=$a=~/[(.*)]/; ($bb)=$b=~/[(.*)]/; (Time::Piece->strptime($aa, "%d/%b/%Y:%H:%M:%S:%S %z")->datetime()) cmp (Time::Piece->strptime($bb, "%d/%b/%Y:%H:%M:%S:%S %z")->datetime())} <>'
7
+ ```
8
+
9
+ # 追記: GNU sortコマンドで頑張る
10
+
11
+ `-M`なんて知らなんだわと思い、試してみましたが、普通にやるとうまく行きませんでした。
12
+
13
+ ```
14
+ # テストデータ
15
+ $ perl -le 'print join("\n", map {ucfirst($_)} qw/jan apr feb jun mar dec oct/)'
16
+ Jan
17
+ Apr
18
+ Feb
19
+ Jun
20
+ Mar
21
+ Dec
22
+ Oct
23
+ ```
24
+
25
+ ```
26
+ $ perl -le 'print join("\n", map {ucfirst($_)} qw/jan apr feb jun mar dec oct/)' | sort
27
+ Apr
28
+ Dec
29
+ Feb
30
+ Jan
31
+ Jun
32
+ Mar
33
+ Oct
34
+ $ perl -le 'print join("\n", map {ucfirst($_)} qw/jan apr feb jun mar dec oct/)' | sort -M
35
+ Apr
36
+ Dec
37
+ Feb
38
+ Jan
39
+ Jun
40
+ Mar
41
+ Oct
42
+ ```
43
+
44
+ どうもlocaleを環境変数にて設定する必要があるらしいです。
45
+
46
+ ```
47
+ $ perl -le 'print join("\n", map {ucfirst($_)} qw/jan apr feb jun mar dec oct/)' |LC_TIME=C sort -M
48
+ Jan
49
+ Feb
50
+ Mar
51
+ Apr
52
+ Jun
53
+ Oct
54
+ Dec
55
+ ```
56
+
57
+ ```
58
+ $ cat test.log | LC_TIME=C sort -t '[' -k2.8n -k2.4,2.6M -k2.1,2.2n
59
+ 10.222.11.11 - - [08/Feb/2020:17:21:21:21 +0800] "POST /set.python HTTP/1.1 300 "-"
60
+ 10.222.11.11 - - [07/Jan/2021:18:21:21:21 +0800] "POST /set.python HTTP/1.1 300 "-"
61
+ 10.222.11.11 - - [10/Mar/2021:20:12:21:21 +0800] "POST /set.python HTTP/1.1 300 "-"
62
+ 10.222.11.11 - - [05/Apr/2021:03:21:21:21 +0800] "POST /set.python HTTP/1.1 300 "-"
63
+ 10.222.11.11 - - [09/Jun/2021:19:13:21:21 +0800] "POST /set.python HTTP/1.1 300 "-"
64
+ 10.222.11.11 - - [22/Oct/2021:02:20:21:21 +0800] "POST /set.python HTTP/1.1 300 "-"
65
+ 10.222.11.11 - - [21/Dec/2021:01:11:21:21 +0800] "POST /set.python HTTP/1.1 300 "-"
7
66
  ```