-2

原始日志文件示例:

"GET /dynamic_preroll_playlist.fmil?domain=13nwuc&width=480&height=360&imu=medrect&pubchannel=filmannex&ad_unit=category_2&sdk_ver=2.4.1.3&embeddedIn=http%3A%2F%2Fwww.filmannex.com%2Fmovie%2Fend-of-the-tunnel%2F20872&sdk_url= http%3A%2F%2Fstatic2.filmannex.com%2Fflash%2F&视口=10,261,971,0,981,10,10,261 HTTP/1.1”、200、201、1516、16363、“http://static2.filmannex.com/flash/yume_ad_library.swf”、pl.networks.com、“Mozilla/4.0(兼容;MSIE 7.0;Windows NT 6.0 ; FunWebProducts的; GTB7.3; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30618; FunWebProducts的; .NET4.0C) “ ”24_100_150_188_jZKFKQQjdRNM6e“, ”0rO0ABXd8AAAACgAAASQAAAaLAAAGiwAAASgAAAaLAAAGiwAAAVoAAAaLAAAGiwAAAVkAAAaKAAAGiwAAAdwAAAaKAAAGiwAAAhIAAAaKAAAGiwAAAhUAAAaKAAAGiwAAAhYAAAaKAAAGiwAAAhsAAAaKAAAGiwAAAiwAAAaKAAAGiw **“,” -”、“-”、“@YD_1;233_2739”、-、“-”、“24.100.150.188”、“199.127.205.6”

所需的输出是第 5 和第 6 个视口:

981 10

我得到了下面的 gawk 代码,它产生了第三个和第四个字段:

910 0

gawk 'match($0, /&viewport=[0-9]+,[0-9]+,([0-9]+),([0-9]+)/, m){print m[1], m[2]}' filename

谁能帮我解决这个问题?对gawk命令稍作改动就可以获取视口的第5个和第6个参数?

有任何想法吗?提前非常感谢:)

4

2 回答 2

1

此命令将执行您想要的操作:

awk '{split($0,a,"viewport=");split(a[2],b,",");print b[5],b[6]}' filename

给出:

981 10

如果 您确实想要修改后的gawk命令

gawk 'match($0, /&viewport=[0-9]+,[0-9]+,([0-9]+),([0-9]+),([0-9]+),([0-9]+),([0-9]+)/, m){print m[3], m[4]}' filename

也将工作。

我认为第一个解决方案更清晰/更清晰,也更容易修改。

于 2012-08-08T00:33:38.343 回答
0

这可能对您有用(GNU sed):

sed 's/.*&viewport=\(\([^,]*\),\([^,]*\),\)\{3\}.*/\2 \3/' file
于 2012-08-08T05:24:40.770 回答