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