免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 8762 | 回复: 11

[文本处理] apache日志按空格分段,useragent字段有多个空格?如何处理? [复制链接]

论坛徽章:
0
发表于 2014-04-24 16:02 |显示全部楼层
这是apache的日志,如果我想按空格为分隔符,分为17列,但是useragent字段中也有空格,因此往往无法达到目的,其中useragent字段是用双引号引起来的。请各位达人帮忙想想办法,谢谢!

180.119.3.151 919875417.4169381332.1293961202 - [22/Apr/2014:10:00:10 +0800] "GET /topheader/ajaxGetInfoForTopbar?jsoncallback=jQuery18307817990176845342_1398132071245&_=1398132071274 HTTP/1.1" 200 154 "http://super.51fanli.com/brand-217" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/30.0.1599.101 Safari/537.36" 44903 7387828 fun.51fanli.com 192.168.2.206 192.168.2.172

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
发表于 2014-04-24 16:57 |显示全部楼层
回复 1# ben_robinson

How about this one ...

$ awk -vq='"' '{for(c=n=1;n<=NF;n++){if($n~"^"q){Q=1;$c=$n;if($n~q"$"){Q=0;c++};continue};if(Q){$c=$c" "$n}else{$c=$n;c++};if($n~q"$"){Q=0;c++}};NF=c-1;for(n=1;n<=NF;n++)print n"="$n}' FILE
1=180.119.3.151
2=919875417.4169381332.1293961202
3=-
4=[22/Apr/2014:10:00:10
5=+0800]
6="GET /topheader/ajaxGetInfoForTopbar?jsoncallback=jQuery18307817990176845342_1398132071245&_=1398132071274 HTTP/1.1"
7=200
8=154
9="http://super.51fanli.com/brand-217"
10="Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/30.0.1599.101 Safari/537.36"
11=44903
12=7387828
13=fun.51fanli.com
14=192.168.2.206
15=192.168.2.172

   

论坛徽章:
0
发表于 2014-04-24 17:04 |显示全部楼层
比较笨点的方法,狸猫换太子
  1. [root@localhost home]# awk -F'"' '{gsub(" ","@",$6)}1' file | awk '{for(i=1;i<=NF;i++)print $i}' | sed 's/@/ /g'
  2. 180.119.3.151
  3. 919875417.4169381332.1293961202
  4. -
  5. [22/Apr/2014:10:00:10
  6. +0800]
  7. GET
  8. /topheader/ajaxGetInfoForTopbar?jsoncallback=jQuery18307817990176845342_1398132071245&_=1398132071274
  9. HTTP/1.1
  10. 200
  11. 154
  12. http://super.51fanli.com/brand-217
  13. Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/30.0.1599.101 Safari/537.36
  14. 44903
  15. 7387828
  16. fun.51fanli.com
  17. 192.168.2.206
  18. 192.168.2.172
复制代码

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
发表于 2014-04-24 17:10 |显示全部楼层
本帖最后由 ly5066113 于 2014-04-24 17:12 编辑

回复 1# ben_robinson


try:
  1. sed -r 's/ /\n/g;:a;s/((\n|^)"[^"]*)\n([^"]*"(\n|$))/\1 \3/;ta' file
复制代码

论坛徽章:
0
发表于 2014-04-24 17:18 |显示全部楼层
回复 3# love_shift


    多谢,非常感动。

论坛徽章:
0
发表于 2014-04-24 17:20 |显示全部楼层
跟随TIM大师的脚步学习!回复 4# ly5066113


   

论坛徽章:
0
发表于 2014-04-24 17:22 |显示全部楼层
各路大仙都很牛,我自己还是短炼啊。。

论坛徽章:
0
发表于 2014-04-24 17:36 |显示全部楼层
awk -F'"' '{gsub(" ","@",$6)}1'  /mnt/phpweb/192.168.2.*/fun/fun_2014_04_22_10_access.log |awk 'BEGIN{OFS="|"}{$1=$1;print $0}'|awk -F'|' 'BEGIN{OFS="|"}{gsub("@"," ",$12)}1{$1=$1;print $0}'


211.136.28.147|-|-|[22/Apr/2014:09:59:59|+0800]|GET|/api/mobile/getResource?key=iphone_remove_ads_in_pages,iphone_internal_pages,iphone_taobao_url_rule,taobao_app_key,taobao_api_error_code,iphone_tb_custom_page,custom_page_title,switch,iphone_tb_carturl&devid=813740129100&c_aver=1.0&c_src=1&c_v=3.0.54|HTTP/1.1|200|3728|-|\xe8\xbf\x94\xe5\x88\xa9\xe7\xbd\x91 3.0.54 (iPhone; iPhone OS 7.0.4; zh_CN)|25125|7892250|fun.51fanli.com|192.168.2.206|192.168.2.172
182.110.137.103|1320246617.922052284.3511847237|-|[22/Apr/2014:10:00:00|+0800]|"POST|/api/taohuasuan/getAllCates|HTTP/1.1"|200|188|"-"|"-"|8813|-|fun.51fanli.com|192.168.2.206|192.168.2.171

论坛徽章:
0
发表于 2014-04-24 17:40 |显示全部楼层
最后的版本:终于搞好了   谢谢每一位大仙
$ awk -F'"' '{gsub(" ","@",$6)}1'  /mnt/phpweb/192.168.2.*/fun/fun_2014_04_22_10_access.log |awk  'BEGIN{OFS="|"}{gsub("@"," ",$12)}1{$1=$1;print $0}'|head -2
211.136.28.147|-|-|[22/Apr/2014:09:59:59|+0800]|GET|/api/mobile/getResource?key=iphone_remove_ads_in_pages,iphone_internal_pages,iphone_taobao_url_rule,taobao_app_key,taobao_api_error_code,iphone_tb_custom_page,custom_page_title,switch,iphone_tb_carturl&devid=813740129100&c_aver=1.0&c_src=1&c_v=3.0.54|HTTP/1.1|200|3728|-|\xe8\xbf\x94\xe5\x88\xa9\xe7\xbd\x91 3.0.54 (iPhone; iPhone OS 7.0.4; zh_CN)|25125|7892250|fun.51fanli.com|192.168.2.206|192.168.2.172
182.110.137.103|1320246617.922052284.3511847237|-|[22/Apr/2014:10:00:00|+0800]|"OST|/api/taohuasuan/getAllCates|HTTP/1.1"|200|188|"-"|"-"|8813|-|fun.51fanli.com|192.168.2.206|192.168.2.171

论坛徽章:
0
发表于 2014-04-24 17:42 |显示全部楼层
回复 4# ly5066113

谢谢,您的sed太牛了。


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP