我正在寻找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
但如何使用日期格式制作所需的输出?
答案 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