簡體   English   中英

來自卷曲輸出的AWK時間,日期,狀態和順序

[英]AWK time, date, status and sequence from curl output

需要您使用以下awk語法的幫助。 下面是我卷曲的輸出,我需要稍微改進一下:

INPUT:

        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

這是使用GNU AWK的一種方式。 運行如下:

curl "$URL" | awk -f script.awk

script.awk內容:

BEGIN {

    RS="FINISHED|INITIATED"
    OFS="|"
}

s {
    print ( \
        $1, \
        $3, \
        $2, \
        $9, \
        (s == "FINISHED" ? $11 : "        "), \
        ($NF ~ /:/ ? $NF : $(NF-2)), \
        s \
    )
}

{
    s = RT
}

結果:

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

或者,這是單行:

curl "$URL" | awk 'BEGIN { RS="FINISHED|INITIATED"; OFS="|" } s { print $1, $3, $2, $9, (s == "FINISHED" ? $11 : "        "), ($NF ~ /:/ ? $NF : $(NF-2)), s } { s = RT }'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM