小试awk

来源:互联网 发布:pdf.js 中文字体 编辑:程序博客网 时间:2024/06/04 08:06

因工作的原因,这几天处理一些告警表的汇总,很多条告警是分散的,
有些时候一个告警对应一条告警码,有些时候一个告警对应两条告警
码,有的时候一个告警对应多条告警码,当时我就拿着excel表对这些
告警分类,但那时我就想这个问题用awk做起来肯定很方便,但我只是
学习linux启动代码的时候顺便看了下awk的用法,且已经忘了,于是今
天回到家补了补,写了一个很挫的脚本,实现了这个功能,呵呵!

-----------------------------------------------------------------
awk脚本:awktest
---------------
#!/bin/awk

BEGIN { nr = 0 }

#################################################
    {
  type_array[nr] = $1;
  alarm_array[nr] = $2;
  nr++;
    }
#################################################
END{
  for(i=1; i<=5 ; i++){
   for(j=0; j<=nr ; j++ ){
    if(type_array[j] == i){
     printf("%d %s",type_array[j],alarm_array[j]);
     printf("/n");
    }
   }
  }    
   }
--------------------------------------------------------------------
  
  
--------------------------------------------------------------------  
被测数据:betest
----------------
1 0x1800
1 0x3820
1 0x3811
2 0x1801
1 0x385b
2 0x3901
2 0x1851
1 0x3825

说明下:前面1代码着告警编号,可以看出告警号1对应着5个16进制的编码;
    告警号2对应着3个16进制的编码.当然在实际的数据处理中,远比
    这个繁琐,不然的话,我也不会想到awk.
   
---------------------------------------------------------------------

测试命令: $ awk -f awktest betest > test

---------------------------------------------------------------------

然后cat test可以观察结果:
1        0x1800
1        0x3820
1        0x3811
1        0x385b
1        0x3825
2        0x1801
2        0x3901
2        0x1851

----------------------------------------------------------------------

观察上面结果,可以看到数据按规律排放了,在实际的工作中,告警条数远不
止这么多,用这个方法应该很爽.

呵呵,我是第一次用awk,写的这么垃圾,希望不要见笑.

原创粉丝点击