使用Awk+Printf处理autorep输出异常:多行合并及缺省字段填充求助
解决autorep输出的Job行合并与缺失字段补全问题
针对你遇到的两个核心问题,直接给出修改后的Shell脚本(核心基于awk处理),并说明关键逻辑:
autorep -J ALL | awk ' BEGIN { # 初始化所有字段为N/A,确保缺失字段有默认值 job_name = "N/A" date_cond = "N/A" condition = "N/A" run_window = "N/A" # 打印格式化表头 printf "%-20s %-15s %-30s %-20s\n", "Job Name", "Date Conditions", "Condition", "Run Window" printf "%s\n", "-------------------------------------------------------------------------------" } # 匹配Job起始行,触发上一个Job的输出并重置字段 /^Job Name:/ { if (job_name != "N/A") { # 跳过初始状态,避免空行输出 printf "%-20s %-15s %-30s %-20s\n", job_name, date_cond, condition, run_window } # 重置所有字段为初始状态,准备处理新Job job_name = "N/A" date_cond = "N/A" condition = "N/A" run_window = "N/A" # 提取当前Job名称 split($0, arr, ": ") job_name = arr[2] next } # 匹配Date Conditions字段并赋值 /^Date Conditions:/ { split($0, arr, ": ") date_cond = arr[2] next } # 匹配Condition字段并赋值 /^Condition:/ { split($0, arr, ": ") condition = arr[2] next } # 匹配Run Window字段并赋值 /^Run Window:/ { split($0, arr, ": ") run_window = arr[2] next } # 处理最后一个Job,避免遗漏输出 END { if (job_name != "N/A") { printf "%-20s %-15s %-30s %-20s\n", job_name, date_cond, condition, run_window } } '
关键逻辑说明:
- 解决行合并问题:以
Job Name:行作为每个Job的分割标记,每次识别到新Job时,先输出上一个Job的完整信息,再重置字段处理新Job,确保每个Job单独成行。 - 解决缺失字段问题:所有字段初始化为
N/A,仅当匹配到对应字段行时才覆盖赋值,未匹配到的字段保持N/A。 - 格式化输出:用
printf固定字段宽度,保证输出对齐美观。
预期输出示例:
Job Name Date Conditions Condition Run Window ------------------------------------------------------------------------------- JOB_BACKUP_DB 0 N/A N/A JOB_SYNC_FILES 1 FILE_READY WINDOW_OFFPEAK JOB_CLEAN_LOG 0 N/A N/A
内容的提问来源于stack exchange,提问作者NecroCoder
相关产品推荐
相关产品推荐

