1

使用した Oozie コマンド

oozie jobs -oozie http://localhost:11000/oozie -localtime | grep "2013-05-08" > Input.txt

Oozie ログ (Input.txt)

61-oozie     DProSUCCEEDED chronicles      users     2013-05-08 04:47        2013-05-08 04:53
61-oozie     DPRUNNING chronicles      users     2013-05-08 04:47        
61-oozie     DProcessSuspended chronicles      users     2013-05-08 04:42        2013-05-08 04:48
61-oozie     DKILLED chronicles      users     2013-05-08 04:07        2013-05-08 04:09

ステータスメッセージを「SUCCESS/RUNNING/KILLED/SUSPENDED/Prep」として保存する「Status」として追加の列が必要です。

<(プロセス名)><(ステータス)>として2 番目の列から「ステータス」メッセージを取得します。

上記のテキストから区切り文字を推測できません。AWK/カット/部分文字列の概念を利用できるように。

Status messages are static . Job names are dynamic.

4 つのステータス メッセージがあります。

  • 成功した
  • ランニング
  • 準備
  • 殺された
  • 一時停止

望ましい出力

61-oozie     DPro chronicles      users     2013-05-08 04:47        2013-05-08 04:53    SUCCEEDED
61-oozie     DP chronicles      users     2013-05-08 04:47          -       RUNNING
61-oozie     DProcess chronicles      users     2013-05-08 04:42        2013-05-08 04:48    Suspended
61-oozie    D chronicles      users     2013-05-08 04:07        2013-05-08 04:09    KILLED
4

2 に答える 2

1

希望のステータスを抽出して行末につけて、

perl -pe 's/\B(succeeded|running|suspended|killed|prep)//i and $w=$1 and s/$/    $w/' file
于 2013-05-08T11:19:30.830 に答える
0
sed 's/(\w+)(SUCCEEDED|RUNNING|Prep|KILLED|SUSPENDED)(\s+.+)$/\1\3 \2/g'

つまり、事前ステータス、ステータス、事後ステータス -> 事前ステータス、事後ステータス、ステータス

入力と目的の出力のステータスに違いがあるように見えるため、たとえば「ProcessSuspended」インと「SUSPENDED」アウトなど、それらを交換することもできます。

sed 's/(\w+)(SUCCEEDED|RUNNING|Prep|KILLED|SUSPENDED)(\s+.+)$/\1\3 \2/g' | sed 's/ProcessSuspended$/SUSPENDED/g'

または、Perl を使用してルックアップを行います。

于 2013-05-08T10:39:40.163 に答える