0

私はawkプログラミングに非常に慣れていないので、プロセスの実行時間を次のように抽出しようとしています。

$ ps -o etime -p 18613 | awk /[0-9][0-9]:[0-9][0-9]:[0-9][0-9]/
 1-00:05:52

1日以上の場合、dd-hh:mm:ssの形式になることはわかっていますが、正規表現/ [0-9] [0-9]:[0-9][0-9]を混乱させているだけです。 :[0-9] [0-9] /は「dd-」も抽出しますが、結果に「00:05:52」だけを表示しないのはなぜですか?

4

2 に答える 2

0

サイモンがあなたの質問に対するコメントで言ったように、awkこのように使用すると、一致する行全体が印刷されます。

あなたの特定のケースでは、最初の3文字(つまり、4番目の文字から始まる)を引いた2行目を印刷するだけで十分だと思います。これは、次のように実行できます。

ps -o etime -p 18613 | awk 'NR == 2 { print substr($0, 4); }'
于 2013-03-14T05:36:37.563 に答える
0

REでやろうとしていることを行うには:

ps -o etime -p 18613 |
awk 'match($0,/[0-9][0-9]:[0-9][0-9]:[0-9][0-9]/) { print substr($0,RTSTART,RLENGTH) }'

または、GNU awkでは、すべての行がREと一致する場合:

ps -o etime -p 18613 |
awk '{print gensub(/.*([0-9][0-9]:[0-9][0-9]:[0-9][0-9]).*/,"\\1","") }'
于 2013-03-14T20:47:42.303 に答える