2012-11-12 83 views
0

我在尋找一些幫助,從輸出解析 '時間' 從scontrolSLURM預訂輸出解析

scontrol show res root_89 
ReservationName=root_89 StartTime=2012-11-07T14:22:21 EndTime=2012-11-08T16:22:21 Duration=02:00:00 
    Nodes=host NodeCnt=1 Features=(null) PartitionName=(null) Flags=SPEC_NODES 
    Users=root Accounts=(null) Licenses=(null) State=ACTIVE 
scontrol show res root_95 
ReservationName=root_95 StartTime=2013-02-06T16:00:00 EndTime=2013-02-10T06:40:00 Duration=3-14:40:00 
    Nodes=host NodeCnt=1 Features=(null) PartitionName=(null) Flags=SPEC_NODES 
    Users=root Accounts=(null) Licenses=(null) State=INACTIVE 

正如你可以看到,如果預訂真的很長持續時間輸出是搞砸了我在尋找格式'xxHH:mm:ss'

+0

什麼是案件2你的期望的輸出? 14:40:00? – Kent

+0

@Kent - 86:40:00 –

回答

1

這條線應該適用於你的情況:

grep -Po "(?<=Duration=)[0-9-:]*" <yourFile>|awk -F'-' 'NF==2{split($2,t,":");t[1]+=($1*24);print t[1]":"t[2]":"t[3];next;}1' 

請注意,我有點懶惰,所以我用grep來過濾持續時間值。它可以用awk完成,以保存一個進程。如果性能不是你的情況的問題,你可以保持grep那裏。

測試

kent$ cat example 
scontrol show res root_89 
ReservationName=root_89 StartTime=2012-11-07T14:22:21 EndTime=2012-11-08T16:22:21 Duration=02:00:00 
    Nodes=host NodeCnt=1 Features=(null) PartitionName=(null) Flags=SPEC_NODES 
    Users=root Accounts=(null) Licenses=(null) State=ACTIVE 

scontrol show res root_95 
ReservationName=root_95 StartTime=2013-02-06T16:00:00 EndTime=2013-02-10T06:40:00 Duration=3-14:40:00 
    Nodes=host NodeCnt=1 Features=(null) PartitionName=(null) Flags=SPEC_NODES 
    Users=root Accounts=(null) Licenses=(null) State=INACTIVE 

kent$ grep -Po "(?<=Duration=)[0-9-:]*" example|awk -F'-' 'NF==2{split($2,t,":");t[1]+=($1*24);print t[1]":"t[2]":"t[3];next;}1' 
02:00:00 
86:40:00 
+0

我很高興你回答我。這正是我所期待的。 –

1

很簡單的用Perl:

perl -pe's/Duration=\K(\d+)-(\d+)/$1*24+$2/e' myfile