首页 > 解决方案 > 从 Ansible 变量中删除重复行

问题描述

我需要实现两件事。

  1. 从名为 install_loc 的 ansible 变量中删除重复条目

  2. 从 install_loc 中删除任何空的空行。

下面是 install_loc 变量的构造方式。

   - 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'])

你能建议吗?

标签: filteransibleduplicatesoutput

解决方案


解决方案:

- set_fact:
    install_loc: "{{ install_loc.split('\n') | unique | select | list }}"

解释:

  • install_loc.split('\n')install_loc-按换行符拆分
  • unique- 删除重复项
  • select- 摆脱空值或空值
  • list- 从 Python“生成器”转换为列表

如果您想要一个字符串(作为输入),请替换listjoin('\n').


推荐阅读