分组GAWK输出

时间:2017-08-31 15:42:02

标签: gawk

Varlog慷慨地提出了解决之前问题的解决方案,该解决方案甚至将相应的DISCHARGE事件发送到INDUCT并从数组中删除它。这给我留下了所有尚未到达目的地的物品。

此脚本的输出(如下)

/REDIRECT_ITEM_REPLY/ {
    match($0, /itemId=<([^>]+)>/, ary1)
    match($0, /CscdestinationId=<([^>]+)>/, ary2)
    dest[ary1[1]] = ary2[1]
}

/DISCHARGE_VERIFIED/ {
    match($0, /itemId=<([^>]+)>/, ary1)
    delete dest[ary1[1]]
}

END {
    for (id in dest) {
        print dest[id]
    }
}

输出:

17: CHU207
17: CHU207
35: CHU214
1: CHU001
157: FLY437
115: FLY424
108: FLY321

我想把这些信息归结为:

CHU207  -  5
CHU001  -  10
FLY437  -   3

我正在考虑使用UNIQ命令,但只是想知道如何将其合并到脚本中,感谢您的帮助

我尝试过使用uniq -c的命令行方法,但不确定这是否是最好的方法

gawk -f inductedNEW.awk item1.log | uniq -c

感谢您的帮助

菲尔

1 个答案:

答案 0 :(得分:0)

这里不需要管道。您拥有awk程序中所需的一切。

将脚本的END部分更改为:

END {
    print "Detail:"
    for (id in dest) {
        print dest[id]

        group=dest[id];               # group = "123: ABC"
        sub(/^[0-9]+: */, "", group); # group = "ABC"
        groupCounter[group]++;        # counter++
    }
    print "Grouped:"
    for(group in groupCounter) {
        print group " - " groupCounter[group]
    }
}

如果您不需要细节部分,只需将其删除即可。