![フォーマットされた出力のためのシェルスクリプト](https://linux33.com/image/10330/%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88%E3%81%95%E3%82%8C%E3%81%9F%E5%87%BA%E5%8A%9B%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88.png)
06/26/2017 23:40:40 CAUAJM_I_10082 [aspsun14 connected for IOALPPRXXBD_ALPGLGENFAALL 55443.15215291.1]
06/26/2017 23:40:40 CAUAJM_I_40245 EVENT: CHANGE_STATUS STATUS: STARTING JOB: IOALPPRXXBD_ALPGLGENFAALL MACHINE: aspsun14
06/26/2017 23:40:42 CAUAJM_I_40245 EVENT: CHANGE_STATUS STATUS: RUNNING JOB: IOALPPRXXBD_ALPGLGENFAALL MACHINE: aspsun14
06/26/2017 23:49:19 CAUAJM_I_40245 EVENT: CHANGE_STATUS STATUS: SUCCESS JOB: IOALPPRXXBD_ALPGLGENFAALL MACHINE: aspsun14 EXITCODE: 0
06/27/2017 23:40:23 CAUAJM_I_40245 EVENT: CHANGE_STATUS STATUS: STARTING JOB: IOALPPRXXBD_ALPGLGENFAALL MACHINE: aspsun14
06/27/2017 23:40:24 CAUAJM_I_10082 [aspsun14 connected for IOALPPRXXBD_ALPGLGENFAALL 55443.15236942.1]
06/27/2017 23:40:25 CAUAJM_I_40245 EVENT: CHANGE_STATUS STATUS: RUNNING JOB: IOALPPRXXBD_ALPGLGENFAALL MACHINE: aspsun14
06/27/2017 23:48:19 CAUAJM_I_40245 EVENT: CHANGE_STATUS STATUS: SUCCESS JOB: IOALPPRXXBD_ALPGLGENFAALL MACHINE: aspsun14 EXITCODE: 0
06/28/2017 23:41:36 CAUAJM_I_40245 EVENT: CHANGE_STATUS STATUS: STARTING JOB: IOALPPRXXBD_ALPGLGENFAALL MACHINE: aspsun14
06/28/2017 23:41:37 CAUAJM_I_10082 [aspsun14 connected for IOALPPRXXBD_ALPGLGENFAALL 55443.15258301.1]
06/28/2017 23:41:38 CAUAJM_I_40245 EVENT: CHANGE_STATUS STATUS: RUNNING JOB: IOALPPRXXBD_ALPGLGENFAALL MACHINE: aspsun14
06/28/2017 23:48:47 CAUAJM_I_40245 EVENT: CHANGE_STATUS STATUS: SUCCESS JOB: IOALPPRXXBD_ALPGLGENFAALL MACHINE: aspsun14 EXITCODE: 0
上記の内容を含むファイルがあり、たとえば、ジョブ名、開始時刻、終了時刻などの出力が必要です。
IOALPPRXXBD_ALPGLGENFAALL 06/26/2017 23:40:40 06/26/2017 23:49:19
IOALPPRXXBD_ALPGLGENFAALL 06/27/2017 23:40:23 06/27/2017 23:48:19
IOALPPRXXBD_ALPGLGENFAALL 06/28/2017 23:41:36 06/28/2017 23:48:47
答え1
awkはこれに非常に便利です。
#!/usr/bin/awk -f
$5 == "CHANGE_STATUS" && $7 == "STARTING" {
start[$9] = $1 " " $2
}
$5 == "CHANGE_STATUS" && $7 == "SUCCESS" {
print $9,start[$9],$1,$2
}
$ nはn番目の列です。開始日を保存し、ジョブ終了日を見つけたら、すべてを印刷します。 (コードを実行ファイルとして保存し、入力ファイルを引数として渡して呼び出します。)
./script input.txt
これをBashスクリプトに含める必要がある場合は、次のようにします。
awk '
$5 == "CHANGE_STATUS" && $7 == "STARTING" {
start[$9] = $1 " " $2
}
$5 == "CHANGE_STATUS" && $7 == "SUCCESS" {
print $9,start[$9],$1,$2
}
' input_file_or_whatever
ただし、Awkスクリプト自体で一重引用符を使用している場合は注意してください。これは少しトリッキーかもしれません。