我试图将输出数组转换为另一个数组。
假设我从命令输出以下内容:
kube-system extension-apiserver-authentication 6 119d
kube-system kube-dns 0 119d
kube-system kube-dns-autoscaler 1 119d
kube-system kube-flannel-cfg 2 119d
kube-system kubernetes-dashboard-settings 1 29d
我希望每个元素cut -d' ' -f2
得到一个只包含第2列的数组。
就像Java 8中的list.stream().map(l -> l.getName()).collect(toList())
一样。
为了在本地测试,我尝试使用ls -al
作为
ls -al
一个文件夹;owner
并返回所有者名单;它的演示将是:
- name: Run in local to test loop
hosts: 127.0.0.1
connection: local
tasks:
- name: List a folder
shell: ls -al .
register: result
- debug:
msg: "{{ result.stdout_lines }}"
- name: Get Second Separated by Space
shell: echo '{{ item }}' | cut -d' ' -f3; # trying to get column 3
loop: "{{ result.stdout_lines }}"
register: result # this result is not what I am after :(
- debug:
msg: "{{ result }}"
对此有何意见?
F.Y.I
我的电脑中的ls -al
输出类似于:
-rw-rw-r-- 1 hearen hearen 1 Sep 5 12:55 tmp
我用"{{ item.split()[2] }}"
而不是cut -d' ' -f3
来解决这个问题,使用cut元素有两种情况:
column
; - name: Get Second via split
debug:
msg: "{{ item.split()[1] }}"
loop: "{{ result.stdout_lines }}"
不要使用Ansible来实现您在Bash和don't parse ls
output中编写的代码。
如果您想获得所有者列表,可以这样做:
- name: List a folder
find:
path: .
register: find
- debug:
msg: "{{ find.files | map(attribute='pw_name') | list }}"