File: munge.awk.in

package info (click to toggle)
lbdb 0.57-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,264 kB
  • sloc: sh: 7,550; ansic: 1,779; perl: 381; lisp: 265; makefile: 226; objc: 44
file content (75 lines) | stat: -rw-r--r-- 2,094 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#! @AWK@ -f
#
# -*-awk-*-
#
#     Copyright (C) 1998-2000  Thomas Roessler <roessler@guug.de>
#                   2000-2025  Roland Rosenfeld <roland@spinnaker.de>
#                   2007       Yaroslav Halchenko <debian@onerussian.com>
#
#     This program is free software; you can redistribute it and/or modify
#     it under the terms of the GNU General Public License as published by
#     the Free Software Foundation; either version 2 of the License, or
#     (at your option) any later version.
#
#     This program is distributed in the hope that it will be useful,
#     but WITHOUT ANY WARRANTY; without even the implied warranty of
#     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#     GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License along
#    with this program; if not, see <https://www.gnu.org/licenses/>.

function print_line (line, lastdate, count)
{
    if (line == "") return;
    if (limitdate != "" && lastdate < limitdate && count < limitcount) return;
    if (limitcount == 0)
	print line;
    else 
	print line FS count;
}

BEGIN {
    # initialization
    FS = "\t";
    i = 0;

    # default settings
    keeporder = 0;                  # do not keep order by default
    limitdate = "0000-00-00_00:00"; # keep all dates by default
    limitcount = 0;                 # and do not limit by count by default
}

{
    sub(/ +$/, "", $3); # strip trailing spaces (as of former bug)
    line[$1] = ($1 FS $2 FS $3);

    if (lastdate[$1] == "" || lastdate[$1] < $3)
        lastdate[$1] = $3;

    line[$1] = ($1 FS $2 FS lastdate[$1]);

    if ($4 != "")
	cnt[$1] += $4;
    else
        cnt[$1]++;

    if (keeporder == 1)
    {
        pos[$1] = i;
        idx[i++] = $1;
    }
}

END {
    if (keeporder == 1)
       for (j = 0; j < i; j++) {
            if (pos[idx[j]] == j) {
                print_line(line[idx[j]], lastdate[idx[j]], cnt[idx[j]]);
            }
        }
    else
        for (a in line) {
            print_line(line[a], lastdate[a], cnt[a]);
        }
}