0

我是该网站的新手,脚本技能有限,但能够毫无问题地通过脚本选择自己的方式。我想编写一个脚本来实时监控来自多个日志文件的 FIX 消息;按帐户和符号隔离。费率需要按每分钟计算。目前我不确定这是按分钟计算还是滚动 60 秒计算。我还没有写任何东西,我只是想看看这是否可能,是否有人可以给我一些关于什么是最好的脚本语言的指示。谢谢

4

1 回答 1

0

这是gawk中的残酷解决方案。如果在线上有 35=D,我们使用正则表达式将有趣的部分拆分出来,时间戳(没有秒,因此条目属于分钟级别的等价类)和两个标签并将其转储到“多维”数组中,这意味着我们使用这些作为数组的索引。一旦我们检查了所有消息,我们就会扫描数组,没有特定的顺序,并转储计数器。这非常难看..三个“匹配”函数应该写成一个,也许输出排序,但这在带有“排序”的shell中是微不足道的。

#!/usr/bin/awk -f

#Out_Vec__PWKBVSP-LE2__0 [ 601] : timestamp=2013-08-12-13:00:01.235605858 :: latency=1323.3460000000 :: 8=FIX.4.4|9=0253|35=D|34=0000601|52=20130812-13:00:01.235|49=SENDER|56=RECEIVER|‌​57=SOR|50=TRADER|128=SPSE|11=ORDERID1|453=3|448=16|447=D|452=7|448=DMA1|447=D|452‌​=54|448=ABC|447=D|452=36|1=ACCOUNT123|55=LPSB3|54=1|60=20130812-13:00:00.000|38=6‌​400|40=2|44=17.8700|15=BRL|59=0|10=010| :: aux_len=0,

/35=D/ {
    n=match($0, /.*\|1=([^\|]+)\|.*/, tmp1);
    n=match($0, /.*\|55=([^\|]+)\|.*/, tmp2);
    n=match($0, /[^:]+: timestamp=([[:digit:]]+)-([[:digit:]]+)-([[:digit:]]+)-([[:digit:]]+):([[:digit:]]+).*/, ts);
#    print tmp1[1], tmp2[1], ts[1], ts[2], ts[3], ts[4], ts[5];
    aggr[tmp1[1], tmp2[1], ts[1], ts[2], ts[3], ts[4], ts[5]]++;
}

END {
    for (i in aggr)
    print i, aggr[i];
}

对于我得到的样本:

ACCOUNT123PSSA3201308121301 3
ACCOUNT123CPFE3201308121301 1
ACCOUNT123LPSB3201308121300 1
ACCOUNT123GETI4201308121301 1

可以进一步处理。

于 2013-08-13T14:42:54.553 回答