我需要使用 ansible 将一些内容以 csv 格式写入文件
shell: ps -ef | grep java | awk '{print $1}'
register: username
shell: ps -ef | grep java | awk '{print $2}'
register: id
Run Code Online (Sandbox Code Playgroud)
用户名的输出将类似于:
root
admin
test_admin
Run Code Online (Sandbox Code Playgroud)
id 的输出将类似于:
1232
4343
2233
Run Code Online (Sandbox Code Playgroud)
所以我希望将其写入 csv 文件
root,1232
admin,4343
test_admin,2233
Run Code Online (Sandbox Code Playgroud)
请建议。
您可以使用 zip、map 和 join 过滤器的组合来实现您想要的结果:
- hosts: all
tasks:
- name: combination of two lists
set_fact:
lines: "{{ [1,2,3]|zip(['a','b','c'])|list }}"
- debug:
msg: "{{ lines }}"
- name: transform each line into a string
set_fact:
lines: "{{ lines | map('join', ', ') | list }}"
- debug:
msg: "{{ lines }}"
- name: combine lines
set_fact:
lines: "{{ lines | join('\n') }}"
- debug:
msg: "{{ lines }}"
- name: write lines to file
copy:
content: "{{ lines }}"
dest: "output.csv"
Run Code Online (Sandbox Code Playgroud)
或者当您将过滤器组合在一起时:
- name: write lines to file
copy:
content: "{{ [1,2,3] | zip(['a','b','c']) | map('join', ', ') | join('\n') }}"
dest: "output.csv"
Run Code Online (Sandbox Code Playgroud)
output.csv 的内容将是:
1, a
2, b
3, c
Run Code Online (Sandbox Code Playgroud)