Ansible 中的列表按自然字母数字顺序排序

2023-12-14

有没有办法以自然的方式对 Ansible 或 Jinja 中的列表进行排序?

例如,这是列表

test
test123
test12
test5
test1234test
test22te

我需要它来考虑整个数字而不是单个数字,所以test12在下面test5等等。


给定列表

  l1:
    - test
    - test123
    - test12
    - test5
    - test1234test
    - test22te

创建一个带有属性的列表index整数类型,例如

    - set_fact:
        l2: "{{ l2|default([]) +
                [{'index': (_index|length > 0)|ternary(_index|int, 0),
                  'name': item}] }}"
      loop: "{{ l1 }}"
      vars:
        _regex: '^test(\d*)\D*$'
        _replace: '\1'
        _index: "{{ item|regex_replace(_regex, _replace) }}"
    - debug:
        msg: "{{ l2|sort(attribute='index')|
                    map(attribute='name')|
                    list }}"

gives

  msg:
  - test
  - test5
  - test12
  - test22te
  - test123
  - test1234test

无需迭代,声明变量

  _regex: '^test(\d*)\D*$'
  _replace: '\1'
  _index: "{{ l1|map('regex_replace', _regex, _replace)|map('int')|list }}"
  l2: "{{ dict(_index|zip(l1))|
                      dict2items|
                      sort(attribute='key')|
                      map(attribute='value')|
                      list }}"

给出相同的结果

  l2:
  - test
  - test5
  - test12
  - test22te
  - test123
  - test1234test

用于测试的完整剧本示例

- hosts: localhost

  vars:

    l1:
      - test
      - test123
      - test12
      - test5
      - test1234test
      - test22te

    _regex: '^test(\d*)\D*$'
    _replace: '\1'
    _index: "{{ l1|map('regex_replace', _regex, _replace)|map('int')|list }}"
    l2: "{{ dict(_index|zip(l1))|
                        dict2items|
                        sort(attribute='key')|
                        map(attribute='value')|
                        list }}"

  tasks:

    - debug:
        var: _index
    - debug:
        var: l2
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ansible 中的列表按自然字母数字顺序排序 的相关文章

随机推荐

  • GitHub - 检测到大文件 - 无法推送

    我完全无法推送到我的 GitHubmaster分支 它抱怨一个 100 MB 的文件甚至不是前端的一部分 该文件是 Net 后端的一部分 前端是 Angular 13 这些是独立的项目 我在这里能做什么 我已经用尽了所有的选择 它抱怨 An
  • Volumes_from 指令 - docker compose

    与下面的docker compose yml file test build dockerfile docker dev Dockerfile volumes from cachev cachev build dockerfile dock
  • XPath 和 Jenkins Plot 插件

    我正在尝试使用 Jenkins 的 Plot 插件生成一个图表 显示我们的代码中有多少个 TODO 标记 我在构建过程中生成了一个 XML 文件 其中包含有关它们的数据 除其他外 每个 TODO 标记在 XML 中都有一行 如下所示
  • 使用 sqlalchemy WHERE 子句和 IN 运算符时保持顺序

    考虑以下数据库表 ID ticker description 1 GDBR30 30YR 2 GDBR10 10YR 3 GDBR5 5YR 4 GDBR2 2YR 可以用这段代码复制它 from sqlalchemy import Col
  • jQuery 验证 - 如何使用两个 XOR 规则验证一个字段

    我有一个字段可以包含电子邮件或手机 在我的例子中手机是 8 位数字 我已经尝试了两种方法 两个示例都不起作用 因为 元素 没有验证方法 第一种方法 创建自定义方法并在那里进行两种验证 但随后我必须创建自己的电子邮件和移动验证 我找不到在新方
  • useCallBack 执行两次

    为什么 useCallback 钩子执行两次 我收到一条警告 建议我使用 useCallback 所以我正在尝试这样做 据我了解 useCallback 仅在我们传递给数组的对象更新时才会执行 所以我的目标是在加载令牌后让 websocke
  • 从 ThreadPoolTask​​Executor 获取可调用对象或将 Runnable 转换为 Callable

    我在用着线程池任务执行器用于执行我的任务 这些任务是Callable界面 我只想及时检查任务是否仍在池中 监视 怎么做 我知道我可以从线程池执行器但我怎样才能将 Runnable 转换为 Callable 呢 基本上我有这个可调用的 pub
  • 启用和禁用 Android 中的日期

    我在我的应用程序中使用日历 在我的应用程序中成功实现了日历 但问题是如何启用和禁用特定日期 例如 需要在所有月份中仅启用星期一或在所有月份中启用星期一和星期日 我的日历视图 import java util ArrayList import
  • psycopg2.sql 发生了什么?

    在 psycopg2 文档中它引用了sql充满乐趣的财产safely构造 SQL 字符串 然而我在 python 3 上的安装 应该是 PyPI 的最新版本 不包含这样的属性 from psycopg2 import sql ImportE
  • 如何在 matplotlib 中的特定日期绘制垂直线[重复]

    这个问题在这里已经有答案了 如何在特定日期向该图表添加垂直线标记 Week end是日期列 fig ax plt subplots figsize 20 9 thirteen plot line x Week end y OFF color
  • 在 PowerShell 中如何将文件从远程 PSsession 复制到另一台 Windows 服务器

    我正在尝试将文件夹从一台远程服务器复制到 PSSession 内的另一台服务器 它给出了诸如访问被拒绝之类的错误 我对两台服务器都有管理员权限 如果我在没有 PSSession 的情况下尝试它 它会起作用 在远程服务器中 PS C User
  • 如何将变量放置在内存中给定的绝对地址处(使用 GCC)

    RealView ARM C 编译器supports使用变量属性将变量放置在给定的内存地址处at address int var attribute at 0x40001000 var 4 changes the memory locate
  • 屏幕关闭时如何获取传感器数据?

    我正在尝试创建一个应用程序 使用服务在一定时间内跟踪设备的方向 当方向改变时 设备会发出声音 只要设备处于开启状态 此功能就可以完美运行 一旦我锁定设备或屏幕关闭 我就听不到声音 我想要的 我的服务代码是 public class Raka
  • 如何从多个 $_POST 数组插入 MYSQL 行

    我有一个带有 添加联系人 部分的表单 单击该部分后 它会在表单中添加另一行 其中还有 3 个输入框 jfiddle上的代码段 http jsfiddle net fmdx cYxYP HTML
  • 如何从 Tkinter 获取输入

    我正在使用 Tkinter 制作一个程序 其中用户输入以磅为单位的体重 然后输出以公斤为单位的体重 我在获取内容时遇到问题Entry来自用户 我正在计算磅换算为公斤clicked1 有人可以告诉我如何在那里获得条目输入吗 from Tkin
  • 为什么我保存的 D3 选择在某些情况下没有效果?

    我对如何保存 D3 选择供以后使用感到困惑 在下面的代码中 我的轴有一个 全局 变量 首次创建它们时我将它们保存到该变量中 后来 我可以将此变量用于某些事情 此处 设置一些文本 但不能使用其他变量 此处 更新比例 这仅在我显式 重新 选择轴
  • conda 更新 CondaHTTPError:HTTP 无

    跑步中途Conda Update all 更新停滞了 多个软件包已更新 现在 当我跑步时conda update all or conda update conda 我得到这样的回应 C Users AppData Local Contin
  • 使用 Indy 10 和 DELPHI 评估电子邮件

    我使用以下代码来评估消息 使用 INDY 10 组件收到的电子邮件消息的内容 正文 行 function LinesFromMsg aMsg TIdMessage TStrings var i Integer begin for i 0 t
  • 关于Java基本类型方法的问题

    我对 Java 中的原始类型以及将一种类型转换为另一种类型的方法感到困惑 比如说 如果我有一个整数并且想将其转换为字符串 我需要使用 Integer 或 String 的静态方法 例如 String valueOf some integer
  • Ansible 中的列表按自然字母数字顺序排序

    有没有办法以自然的方式对 Ansible 或 Jinja 中的列表进行排序 例如 这是列表 test test123 test12 test5 test1234test test22te 我需要它来考虑整个数字而不是单个数字 所以test1