如何用Shell或Ansible从文本文件提取PID并转为指定YAML格式
用Shell/Ansible提取PID并生成指定YAML格式
Shell 实现方案
直接通过jq、grep和awk组合命令,从目标文件中提取PID并生成要求的YAML格式:
jq -r '.[]' /tmp/log.txt | grep "pid:" | awk '{print "pid: " $3}'
命令说明
jq -r '.[]' /tmp/log.txt:将日志文件中的JSON数组元素逐行输出grep "pid:":过滤出包含PID信息的行awk '{print "pid: " $3}':提取每行中的PID数值,并格式化为pid: [数值]的形式
如果需要将结果写入文件,追加重定向即可:
jq -r '.[]' /tmp/log.txt | grep "pid:" | awk '{print "pid: " $3}' > /tmp/pids.yaml
Ansible 实现方案
编写Ansible Playbook,通过内置模块和过滤器完成提取与格式转换:
- name: 提取PID并生成YAML格式文件 hosts: localhost tasks: # 读取目标日志文件 - name: 读取/tmp/log.txt内容 slurp: src: /tmp/log.txt register: log_data # 解析日志并提取格式化后的PID行 - name: 处理PID信息 set_fact: formatted_pids: >- {{ (log_data.content | b64decode | from_json) | select('search', 'pid:') | map('regex_replace', '.*pid: (\\d+).*', 'pid: \\1') | list }} # 打印结果(可选) - name: 输出PID结果 debug: msg: "{{ formatted_pids }}" # 将结果写入YAML文件(可选) - name: 写入结果到文件 copy: content: "{{ formatted_pids | join('\n') }}\n" dest: /tmp/pids.yaml
步骤说明
slurp模块读取日志文件内容,以base64编码形式存储在变量中- 通过
b64decode解码内容,from_json将字符串转为JSON数组 select('search', 'pid:')过滤出包含PID的数组元素regex_replace提取PID数值并格式化为要求的YAML行- 可选:通过
debug模块输出结果,或用copy模块写入文件
内容的提问来源于stack exchange,提问作者user25613212
相关产品推荐
相关产品推荐

