【问题标题】:Parse a two values from the file从文件中解析两个值
【发布时间】:2023-03-25 09:20:01
【问题描述】:

我的部分文件如下所示:

STATUS REPORT FOR JOB: Job_logging
Generated: 2014-03-14 07:05:03
   Job start time=2014-03-13 06:37:49
   Job end time=2014-03-13 06:37:51
   Job elapsed time=00:00:02
   Job status=1 (Finished OK)
      Stage: Oracle_Connector_0, 1 rows input
      Stage start time=2014-03-13 06:37:51, end time=2014-03-13 06:37:51, elapsed=00:00:00
         Link: DSLink2, 1 rows
      Stage: Peek_3, 1 rows input
      Stage start time=2014-03-13 06:37:51, end time=2014-03-13 06:37:51, elapsed=00:00:00

     Status code = 0
     Link: DSLink2, 1 rows

我需要提取代表作业开始时间和作业结束时间的值

所以我需要将 2014-03-13 06:37:492014-03-13 06:37:51 保存到两个单独的变量中:v1和 v2。

我如何使用 BASH 做到这一点?

我已经用字符串连接和 sed 玩了大约一个小时,但仍然一无所获。

请帮忙?

【问题讨论】:

    标签: bash sed text-parsing string-parsing


    【解决方案1】:

    使用 awk 可以在单行中找到:

    awk -F 'Job (start|end) time=' 'NF>1{print $2}' file
    2014-03-13 06:37:49
    2014-03-13 06:37:51
    

    读取变量中的两个值:

    IFS=';' && read v1 v2 < <(awk -F 'Job (start|end) time=' 'NF>1{printf "%s;", $2}' file)
    

    【讨论】:

    • +1 让我见证了我见过的第二大 FS。第一个是here。只差 1 个字符。 :P
    【解决方案2】:

    您可以为此使用grep

    $ grep -Po '(?<=Job start time=).*' file
    2014-03-13 06:37:49
    
    $ grep -Po '(?<=Job end time=).*' file
    2014-03-13 06:37:51
    

    它使用后视功能检查给定文件中Job start/end time= 之后的内容。

    要存储到变量中,请使用

    $ var=$(grep -Po '(?<=Job end time=).*' file)
    $ echo "$var"
    2014-03-13 06:37:51
    

    【讨论】:

    • 你让我度过了中午 :) 谢谢 fedorqui!
    【解决方案3】:

    这简单易读:

    grep "Job start time" test.txt | cut -d"=" -f2
    grep "Job end time" test.txt | cut -d"=" -f2
    

    这将搜索包含您的特定字符串的行,将分隔符设置为两者之间的 =,并获取其右侧的字段。

    【讨论】:

      【解决方案4】:

      sed:

      v1=$(sed -rn 's/.*Job start time=(.*)/\1/p' yourfile)
      v2=$(sed -rn 's/.*Job end time=(.*)/\1/p' yourfile)
      

      【讨论】:

        【解决方案5】:
        eval `sed -n 's/^ *Job start time=\(.*\)/v1="\1"/p
        s/^ *Job end time=\(.*\)/v2="\1"/p' YourFile`
        

        在 aix/bash 上测试过(所以没有 GNU sed)

        【讨论】:

          猜你喜欢
          • 2011-03-22
          • 2013-07-29
          • 1970-01-01
          • 1970-01-01
          • 2015-04-28
          • 1970-01-01
          • 1970-01-01
          • 2014-05-17
          • 1970-01-01
          相关资源
          最近更新 更多