我有一个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
如果日期与今天的日期匹配,我想写一个可靠的剧本来打印列名。我已经找到了日期匹配逻辑,但无法获得匹配日期的相应列名。
Q:">如果日期与今天的日期匹配,则打印列名">
A: 首先分析数据。由于缺少分隔符,模块read_csv无法解析此文件。修复它,例如
- replace:
path: test.csv
regexp: '(S)[^Sn]+(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"