2013-05-08 66 views
1

Oozie的命令用于模式上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”。

我们将从第2列<(processname)> <(状态)得到了 “状态” 的消息>。

我无法从上述文本中猜出分隔符。所以我们可以使用AWK/cut/substring概念。

Status messages are static . Job names are dynamic. 

会有4状态消息

  • SUCCEEDED
  • RUNNING
  • 制备
  • 镇静
  • SUSPENDED

所需的输出

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 

回答

1

萃取物所要求的状态,并将其上线的端部,

perl -pe 's/\B(succeeded|running|suspended|killed|prep)//i and $w=$1 and s/$/ $w/' file 
+0

无效引用\ 3只需客场-一些:) – Debaditya 2013-05-08 11:23:31

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

即前的状态,状态,后状态 - >前的状态, - 状态后,状态

既然你似乎对输入的状态和期望的输出,例如之间的差在“ProcessSuspended”和“悬”了,那么你可能还需要交换的:

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

或者使用Perl,并做了查找。

+0

错误上's'的命令的RHS – Debaditya 2013-05-08 10:54:19