0

早晨,

使用 ansible 我有这个 stdout_lines :

ok: [localhost] => {
    "msg": [
        "1 peot 11135198 NY",
        "1 LIOS 106075056 berlin",
        "1 EASD 10828842 london",
        "1 APES 20789896 local",
        "1 PZSA 21705924 paris"
    ]
}

我需要获取第二列和第四列并将其存储在一个数组中。但我没有在列上找到带有过滤器的示例。

那么更好的解决方案是什么?在 Jinja2 中使用 Ansible ou 吗?

谢谢你的帮助。

4

2 回答 2

0

我试图拒绝您的代码,但有些事情让我无法理解。获取 find result.stdout_lines 的第 2 列:

提炼 :

-rwxr-xr-x 1 root root 11135198 Sep 25  2018 /root/setup/silinstall/nnstall
-rw-r--r-- 1 root root 106075056 Dec 19 14:33 /usr/lib/locale/locale-archive
-rwxr-xr-x 1 root root 10828842 Jan 27  2015 /usr/lib/libsssymm-dmx.so

如果我只想要第一列和第五列,我会像这样设置变量

  vars:
    myregex: '^\s*(.*)\s+(.*)\s+(.*)\s+(.*)\s+(.*)\s+(.*)\s+(.*)\s+(.*)\s+(.*)\s*$' (number of columns)
    myreplace: '\1 \5'

结果 :

    "myarray": [
        "-rwxr-xr-x 1 Sep",
        "-rw-r--r-- 106075056",<-----------why this error ???
        "-rwxr-xr-x 1 Jan",
        "-rwxr-xr-x. 1 Aug",
        "-rwxr-xr-x 1 Sep"
    ]
}

我不明白为什么我得到错误的专栏。

于 2020-03-20T09:53:02.373 回答
0

问:“我需要获取第二列和第四列并将其存储在一个数组中。”

答:可以使用regex_replace。例如

    - set_fact:
        myarray: "{{ stdout_lines|
                     map('regex_replace', myregex, myreplace)|
                     list }}"
      vars:
        myregex: '^\s*(.*)\s+(.*)\s+(.*)\s+(.*)\s*$'
        myreplace: '\2 \4'
    - debug:
        var: myarray

    "myarray": [
        "peot NY", 
        "LIOS berlin", 
        "EASD london", 
        "APES local", 
        "PZSA paris"
    ]

这是你要找的吗?

于 2020-03-20T08:21:06.130 回答