如何解决如何从 Ansible 中的列值获取列名
create
如果日期与今天的日期匹配,我想写一个 ansible play 来打印列名 已经找出日期匹配逻辑但无法获得匹配日期的相应列名。
解决方法
问:"如果日期与今天的日期匹配,则打印列名称。"
A:先解析数据。由于缺少分隔符,模块 read_csv 不会解析此文件。修复它,例如
- replace:
path: test.csv
regexp: '(\S)[^\S\n]+(\S)'
replace: '\1;\2'
给予
shell> cat test.csv
aday;bday;cday
12-2-2021;12-2-2021;12-2-2021
13-3-2021;12-9-2021;13-1-2021
15-6-2021;12-9-2021;16-2-2021
现在,使用 read_csv,例如
- read_csv:
path: test.csv
delimiter: ';'
register: days
- debug:
var: days
给予
days:
changed: false
dict: {}
failed: false
list:
- aday: 12-2-2021
bday: 12-2-2021
cday: 12-2-2021
- aday: 13-3-2021
bday: 12-9-2021
cday: 13-1-2021
- aday: 15-6-2021
bday: 12-9-2021
cday: 16-2-2021
用列创建字典
- set_fact:
days_dict: "{{ days_dict|d({})|
combine({item: days.list|
map(attribute=item)|
list}) }}"
loop: "{{ days.list.0.keys()|list }}"
给予
days_dict:
aday:
- 12-2-2021
- 13-3-2021
- 15-6-2021
bday:
- 12-2-2021
- 12-9-2021
- 12-9-2021
cday:
- 12-2-2021
- 13-1-2021
- 16-2-2021
现在,选择包含今天日期的列,例如
- set_fact:
cols_today: "{{ cols_today|d([]) + [item.key] }}"
loop: "{{ days_dict|dict2items }}"
vars:
today: '13-1-2021'
when: today in item.value
给予
cols_today:
- cday
过滤器 json_query 给出相同的结果
- set_fact:
cols_today: "{{ days_dict|dict2items|json_query(my_query) }}"
vars:
today: '13-1-2021'
my_query: "[?value.contains(@,'{{ today }}')].key"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。