]>
jfr.im git - rewrite-logs.git/blob - rewrite-logs.pl
1 #find irclogs -type f -execdir perl -i.orig rewrite-logs.pl {} +
3 # Rewrite irssi's log files to have all lines in the same (timestamp) format
7 use POSIX qw
/strftime/;
8 use constant FMT
=> "%s [%m/%d/%y %H:%M:%S]";
10 $ENV{TZ
} = 'America/Chicago';
12 my %months = reverse builtin
::indexed qw
/Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec/;
14 #strftime(fmt, sec, min, hour, mday, mon, year)
15 # all 0-based except mday (1+) and year = real_year-1900.
20 if (/^--- (?:Log opened|Day changed) \w\w\w (?<b>\w\w\w) (?<d>\d\d) (?:(?<H>\d\d):\d\d:\d\d )?(?<Y>\d\d\d\d)/) {
21 # Timezone changed at:
22 # --- Log closed Wed May 17 20:23:54 2023
23 # --- Log opened Wed May 17 19:24:29 2023
24 if ($+{Y
} eq '2023' && (($+{d
} >= 17 && $months{$+{b
}} == 4 && defined $+{H
} && $+{H
} >= 19) || $months{$+{b
}} > 4)) {
25 $ENV{TZ
} = 'America/Denver';
30 $sy = $+{Y
}-1900; # year = %Y - 1900
32 } elsif (/^--- Log closed/) { # ignore
34 } elsif ($sd && s/^(?<H>\d\d):(?<M>\d\d) //) { # starts with HH:MM
35 my $newts = strftime
(FMT
, 0, $+{M
}, $+{H
}, $sd, $sm, $sy);
38 } elsif (s
@^\
[(?<m
>\d\d
)/(?<d>\d\d)/(?<y
>\d\d
) (?<H
>\d\d
):(?<M
>\d\d
):(?<S
>\d\d
)\
]@@) { # starts with [mm/dd/yy HH:MM:SS]
39 my $newts = strftime
(FMT
, $+{S
}, $+{M
}, $+{H
}, $+{d
}, $+{m
}-1, (100+$+{y
})); # year = 2000 + %y - 1900
42 } elsif (/^1\d{9} \[/) { # starts with unixts
43 next; # leave it alone
46 print STDERR
"Unknown --- line: $ARGV:$. $_\n";
48 print STDERR
"Unknown other line: $ARGV:$. $_\n";
50 print STDERR
"No date for line: $sm $sd $sy $ARGV:$. $_\n";
55 if (eof) { # if we're about to move on to another file
56 $ENV{TZ
} = 'America/Chicago'; # reset the timezone for the start of next file (it'll get switched back to Denver again as appropriate)