经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 即可。
原文:https://www.cnblogs.com/RookieSuperman/p/10936480.html