首页 > 解决方案 > 想在 ansible playbook 项目中使用 awk 命令

问题描述

这是我的剧本,如果我将第 4 项与awk带有双引号的命令一起放入如下所示:

tasks:
   - shell: "{{item}}"
     with_items:
      - hostname
      - df -kh
      - uptime
      - grep -i diameter /tmp/PSC-CIPDiameter_8.1_*_1.stat.0 | awk -F"," '{ if ($4!=0 || $5!=0|| $6!=0) print "Diameter  Time : "$1 "   Success: "$3 "    Fail: " $4" Timeout: " $5" Reject: " $6}' 

     register: test

   - debug:
       msg: "{{test.results|map(attribute='stdout_lines')|list}}"

标签: bashawkansibleansible-inventory

解决方案


将 awk 代码放入从模板创建的文件中。这样,您可以单独测试代码并提高代码的可读性。例如,模板

shell> cat templates/script01.j2.awk 
{
  if ($4!=0 || $5!=0|| $6!=0)
    print "Diameter Time:" $1 " Success:" $3 " Fail:" $4 " Timeout:" $5 " Reject:"$6;
}

和剧本

- hosts: localhost
  tasks:
    - template:
        src: script01.j2.awk
        dest: script01.awk
    - shell: "{{ item }}"
      loop:
        - uptime
        - "echo 1,2,3,4,5,6 | awk -F',' -f script01.awk"
      register: test
    - debug:
        msg: "{{ test.results|map(attribute='stdout')|list }}"

    "msg": [
        " 17:05:13 up 3 days, 13:42,  1 user,  load average: 1.93, 1.45, 1.74",
        "Diameter Time:1 Success:3 Fail:4 Timeout:5 Reject:6"
    ]

推荐阅读