V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
samaria
V2EX  ›  Linux

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

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

    求大神,刚刚写 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   ·   实用小工具   ·   1182 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 23:22 · PVG 07:22 · LAX 15:22 · JFK 18:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.