Merge branch 'add-datefmt'
[sunny256-utils.git] / split_ep-logg
blobe6504d6a6415a8095934adf63df1fb84db7ff5d4
1 #!/usr/bin/env perl
3 #=====================================================================
4 # split_ep-logg
5 # File ID: 91565ce8-5d44-11df-ab2c-90e6ba3022ac
6 # Splitter opp filer med filer som begynner med sekunder sia 1970.
7 # Legger delene som $Dir/åååå/[NAVN.]åååå-mm-ddZ[.EXT] .
8 # Bruker bare verdier med 9 eller 10 siffer. Med andre ord funker det
9 # greit fra og med 1973-03-03 09:46:40 GMT til 2286-11-20 17:46:39 GMT.
11 # ©opyleft 2004 Øyvind A. Holm <sunny@sunbase.org>
12 # Lisens: GNU General Public License versjon 2 eller nyere ♥
13 #=====================================================================
15 use strict;
16 use warnings;
17 use Time::Local;
18 use Getopt::Std;
20 our ($opt_d, $opt_e, $opt_h, $opt_n, $opt_z) =
21 ( "", "", 0, "", 0);
22 getopts('d:e:hn:z');
24 $| = 1;
26 my ( $Dir, $Fnavn, $Last, $compress_file) =
27 ("out", "", "", $opt_z);
29 my $Name = length($opt_n) ? "$opt_n." : "";
30 my $Ext = length($opt_e) ? ".$opt_e" : "";
32 $opt_h && usage(0);
34 length($opt_d) && ($Dir = $opt_d);
35 -d $Dir || mkdir($Dir, 0777) || die("mkdir(\"$Dir\"): $!");
37 while (<>) {
38 if (m#^(\d{9,10})\b(.*)#) {
39 my ($Secs, $Rest) =
40 ( $1, $2);
41 my ($u_sec, $u_min, $u_hour, $u_mday, $u_mon, $u_year, $u_wday, $u_yday) = gmtime($Secs);
42 $u_year += 1900; # Urgh
43 $u_mon += 1; # Dobbelturgh
44 $Fnavn = sprintf("%s/%04u/%s%04u-%02u-%02uZ%s", $Dir, $u_year, $Name, $u_year, $u_mon, $u_mday, $Ext);
45 if ($Fnavn ne $Last) {
46 if ($compress_file && -e $Last) {
47 close(ToFP);
48 unless (-e "$Last.gz") {
49 print(STDERR "Kjører \"/bin/gzip -N $Last &\"\n");
50 system("/bin/gzip -N $Last &");
51 } else {
52 warn("$Last.gz: Fila eksisterer allerede, pakker ikke $Last . Må ordnes manuelt.\n");
55 -d "$Dir/$u_year" || mkdir("$Dir/$u_year", 0777) || die("$0: mkdir(\"$Dir/$u_year\"): $!. R.I.P. & sånn.");
56 if (-e $Fnavn) {
57 warn("$Fnavn: Fila finnes fra før, skriver til \"$Fnavn.DUP\".\n");
58 my $op_pref = (-e "$Fnavn.DUP") ? ">>" : ">";
59 if (open(ToFP, "$op_pref$Fnavn.DUP")) {
60 seek(ToFP, 0, 2) || die("$Fnavn.DUP: seek() til slutten: $!");
61 } else {
62 die("$Fnavn.DUP: Åpning for skriving: $!");
64 } else {
65 print(STDERR "Ny fil: \"$Fnavn\"\n");
66 if (open(ToFP, ">$Fnavn")) {
67 seek(ToFP, 0, 2) || die("$Fnavn: seek() til slutten: $!");
68 } else {
69 die("$Fnavn: Åpning for skriving: $!");
73 print(ToFP $_) || die("Feil under skriving til $Fnavn(.DUP): $!");
74 } else {
75 my $err_name = length($Fnavn) ? "$Fnavn.ERR" : "$Dir/undef.ERR";
76 warn("Linje $.: Ukjent format, skriver til \"$err_name\".\n");
77 my $op_pref = (-e "$err_name") ? ">>" : ">";
78 if (open(ErrFP, "$op_pref$err_name")) {
79 seek(ErrFP, 0, 2) || die("$err_name: seek() til slutten: $!");
80 } else {
81 die("$err_name: Åpning for skriving: $!");
83 print(ErrFP $_) || die("Feil under skriving til $err_name: $!");
84 close(ErrFP);
86 $Last = $Fnavn;
89 sub usage {
90 my $Retval = shift;
92 print(<<END);
94 Syntax: $0 [valg] [fil [flere filer [...]]]
96 Programmet leser filer som har linjer som begynner med antall sekunder
97 sia 1970-01-01 00:00:00 GMT fra stdin eller filnavn på kommandolinja og
98 splitter dem i deler på formatet "DIR/åååå/[NAVN.]åååå-mm-ddZ[.EXT]" .
99 Bruker bare verdier med 9 eller 10 siffer. Med andre ord funker det
100 greit fra og med 1973-03-03 09:46:40 GMT til 2286-11-20 17:46:39 GMT.
102 Valg:
104 -d DIR Plassér filene i DIR . Standard: "$Dir".
105 -e EXT Bruk EXT som extension. (Automatisk punktum i begynnelsen.)
106 Standard: "$Ext".
107 -h Hjælp mæ.
108 -n NAVN Bruk NAVN som valgfritt prefiks i filnavnet. Automatisk punktum
109 på slutten. Standard: "$Name".
110 -z Pakk filene etterhvert som de er ferdigsplitta.
112 Den splitter selvfølgelig opp filene på grunnlag av GMT. Folkeaksjonen
113 Mot Sommertid slår til igjen. Ikke det med sol, utepils og miniskjørt
114 her og der, men den klokkefløttinga er uendelig plagsom og lager i
115 tillegg unøyaktighet i loggene.
117 Krota sammen av Øyvind A. Holm <sunny\@sunbase.org>.
118 Lisens: GNU General Public License versjon 2 eller nyere ♥
121 exit($Retval);
122 } # usage()
124 __END__
126 =pod
128 =head1 LICENCE
130 This program is free software; you can redistribute it and/or modify it
131 under the terms of the GNU General Public License as published by the
132 Free Software Foundation; either version 2 of the License, or (at your
133 option) any later version.
135 This program is distributed in the hope that it will be useful, but
136 WITHOUT ANY WARRANTY; without even the implied warranty of
137 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
138 See the GNU General Public License for more details.
140 You should have received a copy of the GNU General Public License along
141 with this program; if not, write to the Free Software Foundation, Inc.,
142 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
144 =cut
146 # End of file split_ep-logg