【问题标题】:how to split lines in unix log file output如何在unix日志文件输出中拆分行
【发布时间】:2010-10-30 20:12:52
【问题描述】:

我希望能够从日志文件中解析日期和时间。目前它们采用以下格式:

"02/Jun/2009:14:38:50" 但我想使用 linux 命令行中可用的东西将它们分隔在不同的列中,以便生成的输出如下所示:

“2009 年 6 月 2 日”“14:38:50”

有人可以说明如何做到这一点吗?

问候

【问题讨论】:

    标签: regex unix sed awk


    【解决方案1】:

    如果没有其他格式的行,克里斯的答案是最好的。如果您只需要影响具有该特定格式的行,请执行以下操作:

    cat log | sed -e 's/"\([^:]*\):\([^"]*\)"/"\1" "\2"/'
    

    【讨论】:

    • cat的无用使用:可以使用sed -e '...' < log
    【解决方案2】:

    如果这就是每一行的全部内容,也许:

    cat file.txt | sed -e 's/:/" "/'
    

    【讨论】:

    • 请注意,这将(有意)仅替换第一个 : 与该字符串。另外,请确保不要将该输出重定向回原始文件,否则您将得到一个空文件。
    【解决方案3】:

    纯猛击:

    while read line ; do echo ${line/:/\" \"}; done < logfile
    

    【讨论】:

      【解决方案4】:

      awk的sub()函数如果替换成功则返回1,所以:

      cat file.txt | awk 'sub(/:/,"\" \"")'
      

      GNU awk 可以使用 gensub() 函数,所以这是下面的反向引用示例。

      cat file.txt | gawk '$0=gensub(/("[^:]*):([^"]*")/,"\\1\" \"\\2",1)'
      

      【讨论】:

        【解决方案5】:

        用于查找正则表达式“&:&:&:&”并在第一个冒号之前和之后分隔的biterscript。 (& 表示任意数量的任意字符)。

        var str log
        cat "logfile" > $log
        while ( { sen -r "^&:&:&:&^" $log } > 0 )
        do
            var str datetime, date, time
            stex -r "^&:&:&:&^" $log > $datetime
            stex -p "]^:^" $datetime > $date    # String before the first : is date.
            stex -p "^:^[" $datetime > $time    # String after the first : is time.
            echo $date "\t" $time
        done
        

        要尝试,您可以下载 biterscripting。谷歌一下,或者安装说明在http://www.biterscripting.com

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-05-24
          • 1970-01-01
          • 2014-02-17
          • 2012-04-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-08-27
          相关资源
          最近更新 更多