bash - 来自 curl 输出的 AWK 时间、日期、状态和顺序

标签 bash curl awk

需要您帮助使用以下 awk 语法。以下是我的 curl 的输出,我需要对其进行一些改进:

输入:

        RSYNCA-BACKUP
        RCYNCA 20140517 0021 2182097 2082097
        2014820905820917 10:03:54
        2014820905820917 10:37:43
        0:33:49


        RSYNCB-COPY
        20140517 0020 2082097 1982097 7 6 20
        2014820905820917 09:32:20
        2014820905820917 10:59:20
        1:27:00


        RSYNCC
        RCYNCE 20140517 0021 2182097 2082097
        2014820905820917 10:03:54
        2014820905820917 10:37:43
        0:33:49

        RSYNCD
        20140517 0020 2082097 1982097 7 6 20
        2014820905820917 09:32:20
        2014820905820917 10:59:20
        1:27:00

我使用 AWK 收到的输出:

RSYNCA-BACKUP|20140502|RCYNCA|10:02:15|10:56:42|0:54:27|FINISHED
RSYNCB-COPY|0022||15:31:06|        |0:06:04|INITIATED

Job Name|sequence|date|start time|end time|runtime|status

对于具有启动状态的作业,没有结束时间,因此该字段可以为空

这就是我正在运行的并且弄乱了 awk 输出

awk -v RS='FINISHED|INITIATED' -v OFS='|' '$0 { print $1, $3, $2, $8, RS }'

RSYNCJOBNA|0021|20140502|2014820905820902|FINISHED|INITIATED
RSYNCJOBNA|0022|20140502|2014820905820902|FINISHED|INITIATED

我猜我的 curl 输入有额外的空格,这可能是问题所在,这是一个真实的例子:

INITIATED
            RSYNCA
            20140502 0036 3682096 3582096 6 5
            2014820905820902 17:31:08
                0:17:16 ce eque
            INITIATED
            RSYNCA
            20140502 0035 3582096 3482096 6 5
            2014820905820902 17:01:10
                0:47:14 ce eque
            FINISHED
            RSYNCA
            20140502 0034 3482096 3382096 6 5
            2014820905820902 16:31:03
            2014820905820902 17:24:45
            0:53:42
            FINISHED
            RSYNCA
            20140502 0033 3382096 3282096 6 5
            2014820905820902 16:01:09
            2014820905820902 16:47:12
            0:46:03

最佳答案

curl "URL" |
    awk -v OFS='|' '/FINISHED|INITIATED/ {
        status = $1; getline;
        jobname = $1; getline;
        sequence = $2; date = $1; getline;
        start = $2; getline;
        if (status == "FINISHED") { end = $2; getline } else { end = "        " }
        runtime = $1;
        print jobname, sequence, date, start, end, runtime, status;
    }'

输入后的输出是:

RSYNCA|0036|20140502|17:31:08|        |0:17:16|INITIATED
RSYNCA|0035|20140502|17:01:10|        |0:47:14|INITIATED
RSYNCA|0034|20140502|16:31:03|17:24:45|0:53:42|FINISHED
RSYNCA|0033|20140502|16:01:09|16:47:12|0:46:03|FINISHED

关于bash - 来自 curl 输出的 AWK 时间、日期、状态和顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23438206/

相关文章:

linux - 使用我的 awk 脚本从 CSV 文件中恢复信息

linux - 从后台启动连续运行 Bash Shell 脚本。 (树莓派)

c - 动态链接 LibCURL 时出错

linux - 将长单行命令转换为 bash shell 脚本

bash - 如何替换shell脚本字符串中的变量

regex - Bash 正则表达式检查字符串的第一个字符是否为数字

php - 如何使用 box.net API 上传文件?

php - 在中间停止 curl 转移

bash - awk 读取浮点精度 : cannot read small floats, 例如4E-320

linux - Grep 从 CSV 文件中获取特定列的最新值