0

scontrolからの出力から「Duration」を解析するためのヘルプを探しています

1

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

2

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」を探しています。

4

2 に答える 2

2

Perl では非常に単純です。

perl -pe's/Duration=\K(\d+)-(\d+)/$1*24+$2/e' myfile
于 2012-11-12T18:31:20.277 に答える
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
于 2012-11-12T16:25:13.543 に答える