Filter 从Ansible变量中删除重复行
我需要实现两件事Filter 从Ansible变量中删除重复行,filter,ansible,duplicates,output,Filter,Ansible,Duplicates,Output,我需要实现两件事 从名为install_loc的ansible变量中删除重复项 从install_loc中删除所有空白行 下面是如何构造install_loc变量 - set_fact: install_loc: "{{ install_loc | default('') + item.split( )[4] | dirname + '\n' }}" loop: "{{ fdet }}" 以下是将install_loc写入文件后的内容 /app/logs/scri
- set_fact:
install_loc: "{{ install_loc | default('') + item.split( )[4] | dirname + '\n' }}"
loop: "{{ fdet }}"
以下是将install_loc写入文件后的内容
/app/logs/scripts
/app/logs/mrt
/app/logs/com
/app/logs/exe
/app/logs/scripts
/app/logs/mrt
/app/logs/com
/app/logs/exe
/app/logs/scripts
/app/logs/mrt
/app/logs/com
/app/logs/exe
正如您可以看到的那样,变量是换行符和重复条目
所需输出应如下所示。注意:顺序不重要:
/app/logs/scripts
/app/logs/mrt
/app/logs/com
/app/logs/exe
我试过了
- set_fact:
install_loc: "{{ install_loc | unique }}"
但我得到的扭曲文本如下所示:
set([u'\n', u'/', u'.', u'1', u'0', u'3', u'2', u'C', u'E', u'G', u'F', u'I', u'N', u'a', u'c', u'e', u't', u'i', u'm', u'o', u'o', u'n', u's', u's', u'r', u'u', u't', u'x'])
你能建议一下吗?解决方案:
- set_fact:
install_loc: "{{ install_loc.split('\n') | unique | select | list }}"
说明:
-按换行符拆分install\u loc.split('\n')
install\u loc
-删除重复项unique
-清除空值或空值选择
-将Python“生成器”转换为列表list
如果需要单个字符串(作为输入),请将
list
替换为join('\n')
,这将使install\u loc成为一个列表而不是字符串,并且在写入文件时如下所示:['/app/logs/scripts'、'/app/logs/mrt'、'/app/logs/com'、'/app/logs/exe']当我想让它看起来像/app/logs/scripts/app/logs/mrt/app/logs/com/app/logs/exe时,如果我从命令中删除列表,它会打印在文件中,并带有内联模块。请参阅我答案的最后一行。谢谢@mhurter这回答了我的问题。然而,我无法在不同的剧本中阅读这个变量。如果您能提供帮助,我在此处发布了一个新的查询: