【问题标题】:gawk command in matching data匹配数据中的 gawk 命令
【发布时间】:2012-08-05 01:25:01
【问题描述】:

原始日志文件示例:

“获取 /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&viewport=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; FunWeb产品; GTB7.3; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30618; FunWeb产品; .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 代码,它产生了第 3 和第 4 个字段:

910 0

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

谁能帮我解决这个问题?只是稍微改动一下gawk命令获取viewport的第5个和第6个参数?

有什么想法吗?提前非常感谢:)

【问题讨论】:

  • 进行简单的格式化以使您的问题易于阅读。 Editing-tips
  • @mtk - 我明白他为什么没有这样做。他正在使用粗体突出显示他的字符串的相关部分,这不能在 块中完成。
  • @ghoti 仍然可以进行格式化。已将编辑放入队列中,希望很快就会出现。
  • 为什么从样本数据中得到的是 910 而不是 971?当然,从字段 3 和 4 到字段 5 和 6 的扩展几乎是自动的?

标签: unix sed command gawk


【解决方案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

也可以。

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

【讨论】:

    【解决方案2】:

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

    sed 's/.*&viewport=\(\([^,]*\),\([^,]*\),\)\{3\}.*/\2 \3/' file
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多