写入 csv 文件

Smi*_*ily 4 csv ansible

我需要使用 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)

请建议。

Ala*_*aye 5

您可以使用 zip、ma​​p 和 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)