字符串解析&日期格式化unix

时间:2016-06-06 05:09:10

标签: bash datetime unix

我正在寻找unix命令将下面的字符串解析为所需的格式,如下所示。

  

连接到Integration Service:[is_infa01]。整合服务   status:[Running] Integration Service启动时间:[Mon May 09   2016年10:27:22]整合服务当前时间:[Sun Jun 05 21:57:33   2016]文件夹:[TEST]工作流程:[wf_MASTER_DAILY]版本[2]。工作流程   运行状态:[成功]工作流程运行错误代码:[0]工作流程运行   错误消息:[已成功完成。]工作流程运行ID [425197]。   开始时间:[2016年6月4日星期六13:14:11]结束时间:[星期六04月16日13:20:37   2016]工作流日志文件:   [/informatica/pc961/server/infa_shared/Working/infa01/WorkflowLogs/wf_MASTER_DAILY.log]

我希望解析上面的字符串并得到以下输出(日期格式为YYYY-MM-DD HH:MM:DD)

Workflow run status|Start time|End time
Succeeded|2016-06-04 13:14:11|2016-06-04 13:20:37

我可以获得单个值的值,如下所示

grep "Workflow run status:" | cut -d'[' -f2 | cut -d']' -f1
grep "Start time:" | cut -d'[' -f2 | cut -d']' -f1
grep "End time:" | cut -d'[' -f2 | cut -d']' -f1

但如何使用日期格式制作所需的输出?

3 个答案:

答案 0 :(得分:2)

如果你能得到"开始时间"使用grep表达式的值,如果您有date选项,则可以使用-d命令将其转换为所需的时间戳,例如:

date -d 'Sat Jun 04 13:14:11 2016' +'%Y-%m-%d %T'

答案 1 :(得分:0)

以下是grep& amp;的最终工作代码格式化日期

grep "Start time:" | cut -d'[' -f2 | cut -d']' -f1 | read dt ; date -d "$dt" +'%Y-%m-%d %T'

答案 2 :(得分:0)

假设使用GNU grep,你可以将它全部包装起来:

string="Connected to Integration Service: [is_infa01]. Integration Service status: [Running] Integration Service startup time: [Mon May 09 10:27:22 2016] Integration Service current time: [Sun Jun 05 21:57:33 2016] Folder: [TEST] Workflow: [wf_MASTER_DAILY] version [2]. Workflow run status: [Succeeded] Workflow run error code: [0] Workflow run error message: [Completed successfully.] Workflow run id [425197]. Start time: [Sat Jun 04 13:14:11 2016] End time: [Sat Jun 04 13:20:37 2016] Workflow log file: [/informatica/pc961/server/infa_shared/Working/infa01/WorkflowLogs/wf_MASTER_DAILY.log]"
w="Workflow run status" s="Start time" e="End time"
{ 
    printf "%s\n" "$w" "$s" "$e"
    grep -oP "$w: \\[\\K.*?(?=\\])" <<<"$string" 
    date -d "$(grep -oP "$s: \\[\\K.*?(?=\\])" <<<"$string")" "+%F %T"
    date -d "$(grep -oP "$e: \\[\\K.*?(?=\\])" <<<"$string")" "+%F %T"
} | paste -d'|' - - -

输出

Workflow run status|Start time|End time
Succeeded|2016-06-04 13:14:11|2016-06-04 13:20:37