【问题标题】:split string to be inserted into database要插入数据库的拆分字符串
【发布时间】:2013-07-15 07:02:19
【问题描述】:

我有一个包含很多这样行的文本文件。

Jul 15 12:12:51 whitelist logger: 1|999999999999|id:d9faff7c-4016-4343-b494-37028763bb66 submit date:1307130919 done date:1307130919 stat:DELIVRD err:0|L_VB3_NM_K_P|1373687445|vivnel2|L_VB3_GH_K_P|promo_camp1-bd153424349bc647|1

我需要在数据库中插入值,因此我需要分隔这些值。

1) logger
2) submit date
3) done date
4) stat
5) err

以下正在隔离记录器字符串。

tail  messages | grep logger: | awk -F'logger: ' '{print $2}' | awk '{print $1}'

这是分割字符串的正确方法吗? 有更好的选择吗?

【问题讨论】:

  • 您的脚本将为“记录器”打印1|999999999999|id:d9faff7c-4016-4343-b494-37028763bb66。那是你要的吗?显示示例输入的预期输出,并添加另外几行示例输入以帮助阐明您的要求。

标签: python shell sed awk grep


【解决方案1】:

如果你将关键词放在一个文件中,这将起作用:GNU 的代码:

 sed -nr 's#.*#h;s/.*(&):\\s*(\\w+).*/\\1:\\2/p;g#p' file2|sed -nrf - file1

例子:

$猫文件1 Jul 15 12:12:51 whitelist logger: 1|999999999999|id:d9faff7c-4016-4343-b494-37028763bb66 submit date:1307130919 done date:1307130919 stat:DELIVRD err:0|L_VB3_NM_K_P|1373687445|vivnel2|L_VB3_GH_K_P|promo_camp1- bd153424349bc647|1 $猫文件2 记录器 提交日期 完成日期 统计 呃 $ sed -nr 's#.*#h;s/.*(&):\\s*(\\w+).*/\\1:\\2/p;g#p' file2|sed - nrf - 文件 1 记录器:1 提交日期:1307130919 完成日期:1307130919 统计:DELIVRD 错误:0

【讨论】:

    【解决方案2】:

    在 Python 中有很多方法可以实现这一点。一种简单的方法是使用 Python 的内置正则表达式。假设日志输出始终遵循上述规则,您可以像这样提取感兴趣的部分:

    import re
    
    s = "Jul 15 12:12:51 whitelist logger: 1|999999999999|id:d9faff7c-4016-4343-b494-37028763bb66 submit date:1307130919 done date:1307130919 stat:DELIVRD err:0|L_VB3_NM_K_P|1373687445|vivnel2|L_VB3_GH_K_P|promo_camp1-bd153424349bc647|1"
    
    logger_re = re.compile(
    "logger: ([^ ]+)\
     submit date:(\d+)\
     done date:(\d+)\
     stat:(.+)\
     err:(.+)$")
    
    print logger_re.search(s).groups()
    

    .groups() 方法返回在() 括号内找到的字符串元组。

    http://docs.python.org/2/library/re.html

    【讨论】:

    • 这正是我想要的。谢谢。在比较其他答案后,我会接受答案。
    • 如何选择开头的日期? “白名单”一词之前的文字
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-31
    相关资源
    最近更新 更多