AWK-调用多个数组

AWK-调用多个数组,awk,gawk,Awk,Gawk,对,所以我有一个输入文件,它有很多行,但我只对$11和$12感兴趣 这些字段如下所示: Testing glly TelegramHandlerPackingInfeedHanging Message Count: 65128 MIN: MAX: Total MSG: 65128 AVG: 0ms TelegramHandlerPackingOrderBufferHanging Message Count: 68473 MIN: MAX: Total MSG: 68473 AVG: 0ms 1

对,所以我有一个输入文件,它有很多行,但我只对
$11
$12
感兴趣

这些字段如下所示:

Testing glly
TelegramHandlerPackingInfeedHanging
Message Count: 65128
MIN:
MAX:
Total MSG: 65128
AVG: 0ms
TelegramHandlerPackingOrderBufferHanging
Message Count: 68473
MIN:
MAX:
Total MSG: 68473
AVG: 0ms
11美元

 7.4ms 
 8.5ms 
 11.6ms
12美元

TelegramHandlerPackingInfeedHanging
TelegramHandlerPackingOrderBufferHanging
$12
中有10个不同的值

我有下面的代码,返回这10个值以及我需要的一些输出

#!/usr/bin/gawk -f

BEGIN {
        print "Testing glly"
} #End of BEGIN
{ #Start of MID
        MSG_TYPE[substr($12,match($12,":")+1,match($12,")")-15)]++;
        TIME_AR[$11]++;
        SUM[i++] += $11;
} #End of MID
END {
                for (MSG in MSG_TYPE) {
                        print MSG
                        print "Message Count: "MSG_TYPE[MSG]
                        print "MIN: "
                        print "MAX: "
                        print "Total MSG: "MSG_TYPE[MSG]
                        print "AVG: "SUM[sum]/MSG_TYPE[MSG]"ms"
                }
} #End of END
到目前为止,我得到的结果如下所示:

Testing glly
TelegramHandlerPackingInfeedHanging
Message Count: 65128
MIN:
MAX:
Total MSG: 65128
AVG: 0ms
TelegramHandlerPackingOrderBufferHanging
Message Count: 68473
MIN:
MAX:
Total MSG: 68473
AVG: 0ms
我想做的是你可能已经注意到我还有两个数组,
TIME\u AR
SUM
。我的问题是,如何修改当前脚本以返回10个不同值的单个段,但给我数组中值的总和
sum
?我尝试过这样做,但它为10个不同的值中的每一个返回10个片段

提前谢谢

在仍然提供信息的情况下减少了成本

抱歉,示例输入如下:

INFO  2016-06-15 00:00:28.273 TelegramDispatcher                                       - --> Complete telegram dispatching took 11189.4ms (canHandle(69:TelegramHandlerTUNotification) took 0.0ms, handleTelegram took 11182.0ms, commit took 5.1ms, doACK took 1.8ms, doNAK took -0.0ms performAfterCommit took 0.3ms, failedCanHandle took 0.1ms)
INFO  2016-06-15 00:00:28.531 TelegramDispatcher                                       - --> Complete telegram dispatching took 58.5ms (canHandle(60:TelegramHandlerPackingInfeedHanging) took 0.0ms, handleTelegram took 43.5ms, commit took 13.0ms, doACK took 1.4ms, doNAK took -0.0ms performAfterCommit took 0.3ms, failedCanHandle took 0.1ms)
INFO  2016-06-15 00:00:28.558 TelegramDispatcher                                       - --> Complete telegram dispatching took 26.8ms (canHandle(61:TelegramHandlerPackingOrderBufferHanging) took 0.0ms, handleTelegram took 10.5ms, commit took 14.5ms, doACK took 1.2ms, doNAK took -0.0ms performAfterCommit took 0.4ms, failedCanHandle took 0.1ms)

这看起来差不多是你想要的。您的代码使用了错误的值作为数组的索引

#!/usr/bin/gawk -f

{
    key = substr($12,match($12,":")+1,match($12,")")-15)
    MSG_TYPE[key]++
    TIME_AR[key] += $11
}
END {
    for (MSG in MSG_TYPE)
    {
        print MSG
        print "Message Count: " MSG_TYPE[MSG]
        print "AVG: " TIME_AR[MSG]/MSG_TYPE[MSG] "ms"
    }
}
扩展数据 扩展数据的输出
根据您的输入,编辑Q以显示所需的输出。(我没有投反对票)。祝你好运。虽然这个问题比你以前的问题有了很大的改进,但你不应该期望人们“发现”你的问题所在。仍然有太多的数据和样本输出。你能不能把它减少到1-2条应该处理的好记录(如果合适的话)1-2条不应该处理的记录?您说,
$12
有10个不同的值。如果你知道如何解3,这不是你对任意数量的值进行推广所需要的全部吗?减少,减少,减少。但是祝你好运;-)!如果没有样本输入,我无法测试一个我自信的答案。所以虽然我们中的许多人可能会解决这个问题,但我们不会,因为我们不能确定我们是否正确。@ghoti我已经添加了一个我正在使用的输入文件的示例。不要对变量名使用所有大写字母,因为它们可能会与内置名称冲突,并通过使代码看起来像这样来混淆代码。在发布问题时,在给定输入的情况下,同时显示示例输入和想要获得的输出。这只是创建一个请求帮助的起点的一部分,请看。你已经提到了,这很有意义。
TelegramHandlerPackingInfeedHanging
Message Count: 3
AVG: 56.5667ms
TelegramHandlerTUNotification
Message Count: 2
AVG: 9189.4ms
TelegramHandlerPackingOrderBufferHanging
Message Count: 1
AVG: 26.8ms