awk处理实记,


经grep日志后得到的数据格式如下:

}
 .
[debug][2019-05-20 00:00:00] SendDataStyled:{
   "cmd" : 0001,
   "innings" : "6189269620_0007",
   "players" : [
      {
         "al_board" : 1,
         "al_win" : 1,
         "alter_exp" : 0,
         "alter_money" : 10,
         "uid" : 34329592
      },
      {
         "al_board" : 1,
         "al_win" : 0,
         "alter_exp" : 0,
         "alter_money" : -26,
         "uid" : 13416009
      },
      {
         "al_board" : 1,
         "al_win" : 1,
         "alter_exp" : 0,
         "alter_money" : 16,
         "uid" : 41165640
      }
   ],
   "roomid" : "6189269620",
   "vid" : 1205
}

希望将一条原始数据处理后,生成若干条以下格式的数据:

time al_win alter_money uid roomid

 

由于很久没有用过awk了,先复习了一遍语法做了些小实验才正式开始。经过整理后的思考路径如下:

 

整个路径看起来是挺简单的,实际上用了我好几个小时才写出了完整可用的awk。特此记录下遇到的问题及得到教训。

 

最后,贴上写完的脚本:

source.awk

BEGIN {
FS="[][\":,]";
}

{
if($4~/2019-/) a=$4":"$5":"$6;
else if($2~/innings/) split($5, b, "_");
else if($2~/al_win/) printf a $4;
else if($2~/alter_money/) printf $4;
else if($2~/uid/) printf "%s %s\n", $4, b[1];
}

直接使用 awk -f source.awk data.log > res.txt 即可。

 

另附参考的awk基础知识:

https://www.cnblogs.com/xudong-bupt/p/3721210.html

相关内容

    暂无相关文章