シェルスクリプトを使用したテキストファイルの解析

シェルスクリプトを使用したテキストファイルの解析

この活動は中止されました。以下のtxtファイルがあります。

0112 00000 34 JOB RECOVERY status poll (ORDERID 2N000, RUNNO 0001) ACCEPTED, OWNER
0112 00000 35 JOB RECOVERY status poll (ORDERID 2N000, RUNNO 0001)STARTED , APPL TYPE
0112 00000 36 JOB PROCESS Kafka(ORDERID 2N001, RUNNO 0001) ACCEPTED , OWNER
0112 00001 37 JOB PROCESS Kafka (ORDERID 2N001, RUNNO 0001) STARTED, APPL_TYPE
0112 00001 38 JOB RECOVERY  status poll(ORDERID 2N000, RUNNO 0001) ENDED OK ,ELAPSED - 0.02 SEC
0112 00003 39 JOB PROCESS (ORDERID 2N001, RUNNO 0001) ENDED OK, ELAPSED - 2.28 SEC

orderid各ジョブの経過時間値を取得する必要があります。orderid2N000の場合、経過時間0.02秒を取得する必要があります。これは、orderidシェルスクリプトを使用してファイルからインポートするために必要なすべてに対応します。

このような出力が必要です

orderid    jobname           ELAPSED
2N000      RECOVERY status   0.02
2NOO1      PROCESS  Kafka   2.28

答え1

このsedスクリプトは必要な操作を実行する必要があります。

sed '/ELAPSED/!d;s/.*JOB \([^(]*\)(ORDERID \([^,]*\).*- \([0-9.]*\).*/\2 \1 \3/'

実際のデータに合わせて調整する必要があるかもしれないので、これが何をするのかを説明します。

  • /ELAPSED/!d d!()を含まないすべての行を削除してくださいELAPSED。これELAPSEDは、必要なすべての情報が含まれているためです。その文字列が他の場所に表示される場合は、それに応じてスクリプトを調整する必要があります。
  • 次のs代替コマンドには、行から抽出する正しい部分を識別する必要がある複雑な正規表現が含まれています。
    • .*JOBJOBキーワードの前のすべての項目と一致します。同様に、JOBジョブ名の中にも表示される場合は追加条件が必要ですが、どうすればわかりますか?
    • [^(]*(orderidが開始される前のすべての項目と一致します。\(\)交換部品に配置できるように部品が囲まれています\1RECOVERY status poll出力のように欠けているのではなく、フルジョブ名を取得できることに注意してください。poll
    • (ORDERID言った内容と一致するので、次の部分が注文されます。
    • [^,]*次のコンマの前のすべての項目と一致します。これは再び\(\), so it can be referred to as\2` に囲まれています。
    • .*-最後のダッシュと次のスペースを含むすべてのアイテムと一致します。時間が経つ前に全部食べたい
    • [0-9.]*いくつかの数字とポイントです。これは経過時間に合わなければならず、部分文字列番号でなければなりません。\3
    • .*残りの行と一致します。SEC
  • 代替文字列は、\2 \1 \33つの要素を目的の順序で貼り付け、要素間にスペースを追加します。必要に応じて調整してください。
  • 列ヘッダーを最初の行に配置するには、直接実行してください。

答え2

私も「シェルスクリプトの使用」を無視しました。だから私はawkを使ってみました。

BEGIN {
  # TAB between the words
  print "orderid        jobname Elapsed"
}
/ ACCEPTED/ {
   p = match($0,/^.... ..... .. ... ([A-Za-z ]*).*ORDERID (.....)/,A)
   if (p>0) {
     # print A[2]
     O[A[2]] = A[1]
   }
}
/ELAPSED/ {
   p = match($0,/ORDERID (.....).*ELAPSED - (.*) SEC$/,A)
   # TAB between the double quotes
   print A[1] " " O[A[1]] "     " A[2]
}

タブで区切られた形式を返します。

orderid jobname Elapsed
2N000   RECOVERY status poll    0.02
2N001   PROCESS Kafka   2.28

関連情報