如何用Bash/C-shell工具解析作业数据生成指定格式输出?
用Awk快速解析作业运行日志并生成指定格式输出
要处理这种分段的作业运行数据,Awk是最高效的选择,无需复杂的循环嵌套。下面的脚本可以直接提取你需要的字段并按要求格式输出:
BEGIN { FS = " = " # 把" = "作为字段分隔符,方便提取值 } # 遇到新作业的General信息块时,重置变量 /General Information/ { job = "" internal_status = "" actual_date = "" actual_time = "" } # 提取Job名称 / Job = / { job = $2 } # 提取Internal Status状态 / Internal Status = / { internal_status = $2 } # 拆分Actual Start的日期和时间 / Actual Start = / { actual_date = $2 actual_time = $3 } # 遇到Recovery信息块时,说明当前作业的目标字段已收集完成,输出结果 /Recovery Information/ { if (job != "" && actual_date != "" && actual_time != "" && internal_status != "") { printf "%s.%s.%s.%s\n", job, actual_date, actual_time, internal_status } }
使用方法
把上述脚本保存为parse_jobs.awk,然后执行:
awk -f parse_jobs.awk 你的作业数据文件.txt
输入示例
General Information Job = Job1 Workstation Folder = /test/ Workstation = xyz-test Monitored = No Requires Confirmation = No Interactive = No Critical = No Runtime Information Status = Successful Internal Status = SUCC Not Satisfied Dependencies = 0 Rerun Options = Rerun on the same workstation = No Information = Promoted = No Return Code = 0 Return Code Mapping Expression = Time Information Actual Start = 04/30/2023 00:00:05 TZ EDT Earliest Start = 04/30/2023 00:00:00 TZ EDT Latest Start = 04/30/2023 23:59:00 TZ EDT Latest Start Action = Suppress Maximum Duration = Maximum Duration Action = Minimum Duration = Minimum Duration Action = Critical Latest Start = Recovery Information Action = Stop Message = Job Definition = Workstation Folder = Workstation = Extra Run Information - General Information Job = Job2 Workstation Folder = /test/ Workstation = xyz-test Monitored = No Requires Confirmation = No Interactive = No Critical = No Runtime Information Status = Running Internal Status = EXEC Not Satisfied Dependencies = 0 Rerun Options = Every run Rerun on the same workstation = No Information = Every Promoted = No Return Code = Return Code Mapping Expression = Time Information Actual Start = 04/30/2023 19:17:12 TZ EDT Earliest Start = 04/30/2023 19:15:00 TZ EDT Latest Start = 04/30/2023 23:59:00 TZ EDT Latest Start Action = Suppress Maximum Duration = Maximum Duration Action = Minimum Duration = Minimum Duration Action = Critical Latest Start = Recovery Information Action = Stop Message = Job Definition = Workstation Folder = Workstation = Extra Run Information -
输出结果
Job1.04/30/2023.00:00:05.SUCC Job2.04/30/2023.19:17:12.EXEC
脚本说明
BEGIN块设置字段分隔符,让Awk自动拆分"键=值"格式的行- 遇到
General Information时重置变量,避免不同作业的数据混淆 - 分别匹配对应行提取目标字段
- 用
Recovery Information作为每个作业数据块的结束标记,收集齐字段后立即输出结果
内容的提问来源于stack exchange,提问作者sandy
相关产品推荐
相关产品推荐

