2017-01-23 24 views
1

私は出力フォーマットを定義する際に見えない瞬間に、時間を常に含むように経過時間の出力を取得する方法を探していますので、cut、awk、出力が生成された後でこれを行うためのsedまたは同様のコマンドです。slurmの会計出力を変換する

だから私のような出力を変更することができますどのように任意のアイデア:この形式に

JobID|Partition|User|State|Elapsed| 
902464|interactive-a|bob|COMPLETED|10-00:10:40 
968491|interactive-a|bob|COMPLETED|12:49:20 
970801|interactive-a|sam|COMPLETED|07:00:46 
912973|interactive-a|tom|COMPLETED|41-02:34:41 
971356|interactive-a|mat|COMPLETED|04:36:35 
971912|interactive-a|mat|COMPLETED|02:12:02 
972668|interactive-a|mat|COMPLETED|00:09:06 

(必要な場合、最後の列は0-を追加しました)

JobID|Partition|User|State|Elapsed| 
902464|interactive-a|bob|COMPLETED|10-00:10:40| 
968491|interactive-a|bob|COMPLETED|0-12:49:20| 
970801|interactive-a|sam|COMPLETED|0-07:00:46| 
912973|interactive-a|tom|COMPLETED|41-02:34:41| 
971356|interactive-a|mat|COMPLETED|0-04:36:35| 
971912|interactive-a|mat|COMPLETED|0-02:12:02| 
972668|interactive-a|mat|COMPLETED|0-00:09:06| 

おかげ

答えて

2
$ sed 's/|\([0-9:]\{1,\}\)$/|0-\1/' file 
JobID|Partition|User|State|Elapsed| 
902464|interactive-a|bob|COMPLETED|10-00:10:40 
968491|interactive-a|bob|COMPLETED|0-12:49:20 
970801|interactive-a|sam|COMPLETED|0-07:00:46 
912973|interactive-a|tom|COMPLETED|41-02:34:41 
971356|interactive-a|mat|COMPLETED|0-04:36:35 
971912|interactive-a|mat|COMPLETED|0-02:12:02 
972668|interactive-a|mat|COMPLETED|0-00:09:06 
0

awk:

$ awk -F\| '$5 ~ /-|E/ || ($5 = "0-" $5) && gsub(/ /,"|")' file 
  • -F\|はすなわち、5番目のフィールドで- OR EFS$5 ~ /-|E/
  • |にマッチして印刷レコード
  • ||論理和を設定します。 5番目のフィールドに
  • && gsub(/ /,"|")
  • ($5 = "0-" $5)先頭に追加0-|秒でそれらのスペースに置き換えフィールド区切りを置き換える:以前の場合は、その後に一致しませんでした。 -v OFS="|"を使用した場合は、上記の
  • を除去することができる:

    $ awkの-v OFS = \ | -F \ | '$ 5〜/ - | E/|| ($ 5 = "0-" $ 5) 'ファイル

    $ awk -v OFS = \ | -F \ | '$ 5〜/ - | E/|| ($ 5 = "0-" $ 5) 'ファイル

+0

なぜ '{}'は後ろの '$ awk'行で弾丸の後に動作しませんか? (気楽に遊んでください)。 –

+0

@EdMorton最後の箇条書きの下にある '$ awk'の開始行は、' {} 'で' code line'に変わるか、それをスペースで区切ってはなりません。 –

関連する問題