pattern matching sur les grumes d’Oozie

Commande d’Oozie utilisée

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

Journal 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 

Je veux une colonne supplémentaire comme “Statut” qui stockera le message d’état comme “SUCCESS / RUNNING / KILLED / SUSPENDED / Prep”.

Nous aurons les messages ” Status ” de la 2ème colonne sous la forme .

Je ne suis pas capable de deviner le délimiteur du texte ci-dessus. Nous pouvons donc utiliser les concepts AWK / cut / subssortingng.

 Status messages are static . Job names are dynamic. 

Il y aura 4 messages d’état .

  • RÉUSSI
  • FONCTIONNEMENT
  • Préparation
  • TUÉ
  • SUSPENDU

Sortie désirée

 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 

Extrait le statut désiré et le met à la fin de la ligne,

 perl -pe 's/\B(succeeded|running|suspended|killed|prep)//i and $w=$1 and s/$/ $w/' file 
 sed 's/(\w+)(SUCCEEDED|RUNNING|Prep|KILLED|SUSPENDED)(\s+.+)$/\1\3 \2/g' 

pré-statut, statut, post-statut -> pré-statut, post-statut, statut

Étant donné que vous semblez avoir une différence entre le statut sur l’entrée et le résultat souhaité, par exemple, “ProcessSuspended” et “SUSPENDED”, vous pouvez également échanger ceux-ci:

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

Ou utilisez Perl et faites une recherche.