如何从Autosys JIL文件中提取以admin-*开头的特定作业?
嘿,我来帮你搞定从大型Autosys JIL文件里提取admin-*开头作业的需求!针对这种包含数千条作业的大文件,用命令行工具是最高效的,给你几个亲测靠谱的方案:
方法1:用
gawk精准提取(首推) gawk非常适合处理这种按块组织的文本,能精准识别每个作业块并筛选目标作业。运行下面的命令即可:
gawk '/^insert_job:/ { current_job = $2 # 检查作业名是否以admin-开头 match(current_job, /^admin-.*/) print_block = (RLENGTH > 0) ? 1 : 0 } # 如果标记为要打印,就输出当前行 print_block { print }' your_jil_file.jil > extracted_admin_jobs.jil
逻辑说明:
- 当遇到
insert_job:开头的行,提取第二个字段(作业名) - 判断作业名是否匹配
admin-*模式,匹配则开启「打印模式」 - 后续所有行直到下一个
insert_job:都会被输出,完美捕获整个作业的配置
方法2:用
sed快速筛选 如果你更熟悉sed,可以用范围匹配的方式提取作业块:
# 基础版(注意:如果最后一个作业是admin-开头,可能会截断) sed -n '/^insert_job: admin-/,/^insert_job:/{/^insert_job:/{p;n};p}' your_jil_file.jil > extracted_admin_jobs.jil # 优化版(处理文件末尾的admin作业) sed -n '/^insert_job: admin-/,/^\(insert_job:\|$\)/{/^\(insert_job:\|$\)/{p};p}' your_jil_file.jil > extracted_admin_jobs.jil
逻辑说明:
- 匹配从
insert_job: admin-开始,到下一个insert_job:或者文件结束的所有内容 - 优化版额外处理了文件末尾的作业,避免截断
方法3:Python脚本(适合自定义扩展)
如果需要后续对提取的作业做更多自定义处理(比如修改配置、批量导出),用Python脚本更灵活:
output_file = open('extracted_admin_jobs.jil', 'w') current_job_block = [] inside_admin_job = False with open('your_jil_file.jil', 'r') as jil_file: for line in jil_file: stripped_line = line.strip() # 遇到新作业的开头 if stripped_line.startswith('insert_job:'): # 先把之前的admin作业块写入文件 if inside_admin_job: output_file.writelines(current_job_block) output_file.write('\n') # 用空行分隔不同作业 # 检查当前作业名是否符合要求 job_name = stripped_line.split()[1] inside_admin_job = job_name.startswith('admin-') current_job_block = [line] else: # 如果当前在admin作业块内,就收集行 if inside_admin_job: current_job_block.append(line) # 处理文件最后一个admin作业块 if inside_admin_job: output_file.writelines(current_job_block) output_file.close()
小提示:
- 先拿文件的一小部分测试(比如
head -1000 your_jil_file.jil | [命令]),确认筛选结果符合预期再处理完整文件 - 命令行工具(
gawk/sed)处理大文件的速度比Python快很多,优先选择
内容的提问来源于stack exchange,提问作者Salam
相关产品推荐
相关产品推荐

