• 2009-01-11

    使用grep awk 命令行工具进行统计 - [学习总结]

    Tag:

    师兄做小论文,碰到需要提取文本中特殊信息,然后再对特殊信息进行统计。

    如对下面的信息进行统计。

    1.pir=0.008

    BufferSize 4
    CTP

            Noxim - the NoC Simulator
            (C) University of Catania

    Reset... done! Now running for 10000 cycles...
    Noxim simulation completed.
    ( 11000 cycles executed)
    % Total received packets: 77
    % Total received flits: 488
    % Global average delay (cycles): 6.51948
    % Global average throughput (flits/cycle): 0.0364063
    % Throughput (flits/cycle/IP): 0.0180741
    % Max delay (cycles): 18
    % Total energy (J): 7.38455e-07

            Noxim - the NoC Simulator
            (C) University of Catania

    Reset... done! Now running for 10000 cycles...
    Noxim simulation completed.
    ( 11000 cycles executed)
    % Total received packets: 74
    % Total received flits: 445
    % Global average delay (cycles): 6.86486
    % Global average throughput (flits/cycle): 0.048611
    % Throughput (flits/cycle/IP): 0.0247222
    % Max delay (cycles): 19
    % Total energy (J): 6.56272e-07
    CT

    要求:例如,每遇到5个”% Total received packets: 77”就算一次平均值,其他的类似。

    由于这样的信息很多,上万条吧,txt文本就有200多K,用手和眼睛做,那是累死人。

    由于我以前玩过一点点,所以试着做一下.

    思路:

    1.首先需要剔除掉一些没用的文本行。这里假设只留下行首包含% 的行。

    2.处理之后剩下的数据是每七行一组。这七行分别显示不同的数据。我们首先需要对某一项数据进行统计,首先就得抽取出某一行,如包含Total received packets: 的行。

    3.得到某一项数据之后,然后就需要统计每5行的平均数。

    第1点和第2点只需要用下grep。第3点有点难度。试过用excel,能做,可是半自动的算平均数,还是很耗时,很麻烦。用C语言写要不断的读写文件,指针操作,虽然简单,也麻烦。那就用AWK吧。AWK确实很强大,由于本人只了解点皮毛,折腾一上午才弄出来。

    就一条语句:

    awk -F : 'BEGIN {j=0;i=0;} /%/&&/packets/ {{a[j]=a[j]+$2;i++};if(i%5==0) {j++;}} END {for(i=0;i<j;i++) {printf "%.2f\n",a[i]/5}}' xxx.txt >yyy.txt

    见识了AWK的强大吧。 继续学习~~~


    历史上的今天:





    Post Addr: