实践:awk只提取正则匹配的指定字符串内容

1. 先过滤原始文件中不需要的内容——含有"@_@rm"的行,使用ag 的-v选项过滤掉:

ag -v "@_@rm" mobai-resultmedia.txt > mobai-resultmedia_norm.txt

注意:ag比grep快,所以用ag。 上面生成的文件每行会有其在源文件中的行号

2. 检查下生成的文件:

2210 $ head -2 mobai-resultmedia_norm.txt

3:2017-06-01/conversion.log_2017-06-01T17:2017-06-01T17:51:51.889+08:00@_@{os=iphone, ip=117.136.8.78, ts10=1496308916, clickid=666c45_P24P19R4963089135815383153_1496308916481, source=talkingdata, ua=Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_2 like Mac OS X) AppleWebKit/603.2.4 (KHTML, offer_id=666, os_v=10.3.2, mode=0, sectime=175151, daytime=20170601, n_id=45, ts=1496308916481, cid=P24P19R4963089135815383153}@_@http://px.resultsmedia.com/srv/px.php?px=1358&t=0&pt=1&adv_id=2776&subid=P24P19R4963089135815383153&offerid=666

5:2017-06-01/conversion.log_2017-06-01T17:2017-06-01T17:46:26.81+08:00@_@{os=iphone, ip=112.12.246.144, ts10=1496308597, clickid=666c45_P24P48R4963085974429795014_1496308597485, source=talkingdata, ua=Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, offer_id=666, os_v=10.3.1, mode=0, sectime=174626, daytime=20170601, n_id=45, ts=1496308597485, cid=P24P48R4963085974429795014}@_@http://px.resultsmedia.com/srv/px.php?px=1358&t=0&pt=1&adv_id=2776&subid=P24P48R4963085974429795014&offerid=666

3. 对上述文件中每一行,只提取datetime,ip,os_v的内容。

所以写下如下别名/函数:

function daytimeiposv(){ awk 'BEGIN{FS=OFS=","}{for(i=1;i<=NF;i++){if($i ~ /os_v=|ip=|daytime=/)lines=lines","$i;};print lines;lines=""}' $@;}

注意:尽管指定OFS=",",如果不写成 lines=lines","$i ,输出的分隔符还是空格,为何?awk版本原因?

4. 使用上述函数测试 :

head -3 mobai-resultmedia_norm.txt|daytimeiposv

, ip=117.136.8.78, os_v=10.3.2, daytime=20170601

, ip=112.12.246.144, os_v=10.3.1, daytime=20170601

, ip=117.136.79.80, os_v=10.3.2, daytime=20170601

5. 结果符合要求(使用逗号分割,方便直接当做csv文件使用excel打开)。

直接执行命令得到目标文件:

daytimeiposv mobai-resultmedia_norm.txt > mobai-resultmedia_norm_daytime_ip_osv.txt

6. 检查目标文件内容正确性:

tail -2 mobai-resultmedia_norm_daytime_ip_osv.txt

, ip=223.72.164.22, os_v=10.3.2, daytime=20170630

, ip=223.104.174.89, os_v=10.1.1, daytime=20170630

head -2 mobai-resultmedia_norm_daytime_ip_osv.txt

, ip=117.136.8.78, os_v=10.3.2, daytime=20170601

, ip=112.12.246.144, os_v=10.3.1, daytime=20170601

你可能感兴趣的:(实践:awk只提取正则匹配的指定字符串内容)