shell 脚本问题:处理 Apache 日志文件 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
samaria
V2EX    Linux

shell 脚本问题:处理 Apache 日志文件

  •  
  •   samaria 2016-11-02 22:17:27 +08:00 2604 次点击
    这是一个创建于 3276 天前的主题,其中的信息可能已经有所发展或是发生改变。

    求大神,刚刚写 shell , Apache 的日志文件格式大致是这样的 127.0.0.1 - - [27/May/2016:14:58:56 +0000] "GET /platform/iphone?Version=2.0.0.4&UserName=13123&domainId= HTTP/1.0" 200 709 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36" "-" 我想要得出来的格式是,几号 | 什么设备 |版本号|使用名称这样的格式请问该怎么写,目前得出了 27/may/2016 iphone?version=2.0.0.4&username=13123 请问接下来怎么办 数据基本是这个格式,是不是该截取各个部分

    8 条回复    2016-11-03 12:24:43 +08:00
    vinceguo
        1
    vinceguo  
       2016-11-02 22:49:28 +08:00 via Android
    这东西估计用 python 处理更好点。 shell 得字符串处理比较弱,而且可读性极差(即使用 sed 和 awk )。
    去 github 上看看有没有别人写的 apache 日志解析逻辑
    zhuangzhuang1988
        2
    zhuangzhuang1988  
       2016-11-02 23:42:28 +08:00
    搜了下, apache 的日志模式不太好, 如果是 nginx ,支持 json 输出。 好解析多了。
    debiann
        3
    debiann  
       2016-11-02 23:48:31 +08:00 via iPhone   1
    awk ,利用 FS 分割就行了。


    不需要一步到位,一点一点处理,写起来思路清楚,可读性也好
    privil
        4
    privil  
       2016-11-02 23:50:01 +08:00 via iPhone   1
    awk 支持多个不同的分隔符 awk -F "?|&| |=" 然后重新格式化一下就好了
    234747005
        5
    234747005  
       2016-11-03 09:48:20 +08:00
    为什么不考虑用 goaccess
    samaria
        6
    samaria  
    OP
       2016-11-03 10:47:34 +08:00
    @debiann 是的,我都切割好了,但是数据文本有的地方格式不一样,可能需要的东西一个在$2 上,一个在$3 上,这怎么搞,请教大神
    samaria
        7
    samaria  
    OP
       2016-11-03 10:48:00 +08:00
    @234747005 因为这是老大派的他一个任务,就是得用 shell 写脚本
    debiann
        8
    debiann  
       2016-11-03 12:24:43 +08:00
    @samaria

    不知道具体是怎么不同,有没有规律,关键词是不是固定 /有限?(这个日志文件我也没玩过)

    我只能靠猜测给个思路:
    如果你有了 27/may/2016 iphone?version=2.0.0.4&username=13123 这样的记录,把它变成分行的:

    27/may/2016
    iphone
    version=2.0.0.4
    username=13123

    把这个结果重定向到 grep ,用关键词取出单独的一项,这样就不会受到位置不同的影响。

    只是一个很粗糙的方法,如何改得更高效、优雅,你自己琢磨下吧
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3220 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 10:46 PVG 18:46 LAX 03:46 JFK 06:46
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86