使用Oozie命令
oozie jobs -oozie http://localhost:11000/oozie -localtime | grep "2013-05-08" > Input.txt
Oozie log(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”。
我们会将第二列中的“状态”消息设为<(进程名)><(状态)>。
我无法从上面的文字中猜出分隔符。因此我们可以使用AWK / cut / substring概念。
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
答案 0 :(得分:1)
提取所需状态并将其放在行尾
perl -pe 's/\B(succeeded|running|suspended|killed|prep)//i and $w=$1 and s/$/ $w/' file
答案 1 :(得分: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进行查找。