【问题标题】:Extract specific words from a log file从日志文件中提取特定单词
【发布时间】:2021-10-12 01:05:58
【问题描述】:

现有日志文件:

00:00:00.035790 0x7ff488dfa700>INFO: Session(ABC_BETA -1): 0.000494 Type Info
00:24:00.035799 0x7ff488dfa700>DEBUG: Session(ABC_BETA -1): 1.000000 Type Debug
01:02:00.035801 0x7ff488dfa700>INFO: Session(2NDStage -1): 0.000133 Type Info
21:00:00.035803 0x7ff488dfa700>INFO: Session(jOHN -1): 0.000140 Type Info
23:59:00.035805 0x7ff488dfa700>INFO: Session(NIRVANA -1): 0.003880 Type Info

预期结果:

00:00:00 INFO ABC_BETA
00:24:00 DEBUG ABC_BETA
01:02:00 INFO 2NDStage
21:00:00 INFO jOHN
23:59:00 INFO NIRVANA

我能够使用 sed 的组合提取它,如下所示:

sed 's/[\.\>\)\( \]/{/g'<testfile.log|cut -d "{" -f 1,4,6|sed 's/{/ /g'|sed 's/: / /g'

只是想知道是否有更好的方法来做到这一点?

【问题讨论】:

  • 不需要的部分用一个空格代替:sed 's/\..*&gt;/ /; s/: .*(/ /; s/ -1).*//' file

标签: bash awk sed cut


【解决方案1】:
$ awk -F'[.> (]|: ' '{print $1, $4, $6}' file
00:00:00 INFO ABC_BETA
00:24:00 DEBUG ABC_BETA
01:02:00 INFO 2NDStage
21:00:00 INFO jOHN
23:59:00 INFO NIRVANA

【讨论】:

    【解决方案2】:

    所有的sed

    sed -re 's/([0-9:]{8})[^>]+>([^:]+): Session[(]([^ ]+) .*[)].*/\1 \2 \3/' test.txt
    

    结果:

    00:00:00 INFO ABC_BETA
    00:24:00 DEBUG ABC_BETA
    01:02:00 INFO 2NDStage
    21:00:00 INFO jOHN
    23:59:00 INFO NIRVANA
    

    【讨论】:

      【解决方案3】:

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

      sed -E 's/\.[^(]*\((\S+).* (\S+)$/ \U\2\E \1/' file
      

      模式匹配并使用\U\E 仅将最后一个字段大写。

      【讨论】:

        【解决方案4】:

        另一个sed想法:

        sed -En 's/^([^.]*).*>([^:]*).*\(([^ ]*).*$/\1 \2 \3/p' test.log
        

        地点:

        • -En - 启用 Extended 正则表达式和 (-n) 禁用模式空间的打印
        • ^([^.]*) - 第一个捕获组:从行首 => 不是句号的所有内容 (.)
        • .*&gt; - 第一个捕获组之后的所有内容,直到/包括 &gt;
        • ([^:]*) - 第二个捕获组:所有非冒号 (:)
        • .*\( - 第二个捕获组之后的所有内容,直到/包括文字 (
        • ([^ ]*) - 第三个捕获组:所有不是空格的东西
        • .*$ - 从第三个捕获组到行尾的所有内容
        • \1 \2 \3/p - 使用单个空格作为分隔符打印我们的捕获组

        这会生成:

        00:00:00 INFO ABC_BETA
        00:24:00 DEBUG ABC_BETA
        01:02:00 INFO 2NDStage
        21:00:00 INFO jOHN
        23:59:00 INFO NIRVANA
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-06-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多