Shell 如何通过Ansible使用AWK命令

Shell 如何通过Ansible使用AWK命令,shell,awk,ansible,Shell,Awk,Ansible,我在创造一个负责任的角色方面有问题 我想在shell模块中使用awk通过Ansible注册变量 当我通过终端使用它时,它工作如下: inxi -D | awk '/Total Size:/ {print $7}' | cut -d"(" -f2 但是当我想用它来扮演一个角色时,它就不起作用了 name: Get info shell: inxi -D | awk '/Total Size:/ {print $7}' | cut -d"(" -f2 register: result 显示的信息

我在创造一个负责任的角色方面有问题

我想在shell模块中使用awk通过Ansible注册变量

当我通过终端使用它时,它工作如下:

inxi -D | awk '/Total Size:/ {print $7}' | cut -d"(" -f2
但是当我想用它来扮演一个角色时,它就不起作用了

name: Get info
shell: inxi -D | awk '/Total Size:/ {print $7}' | cut -d"(" -f2
register: result
显示的信息来自
inxi-D

Drives:    HDD Total Size: 53.7GB (2.0% used)
           ID-1: /dev/vda model: N/A size: 53.7GB
           ID-2: /dev/vdb model: N/A size: 0.0GB
我想提取有关硬盘使用情况的数据,例如2.0%


有人能帮上忙吗?

尝试执行以下操作:

 name: Get info
 shell: inxi -D | awk '/Total Size:/ {print $7}' | cut -d"(" -f2
 register: result
并通过
“{{result.stdout}”访问该命令的输出

---
- hosts: localhost
  connection: local

  tasks:
  - name: test shell
    shell: >
      echo "Drives:    HDD Total Size: 53.7GB (2.0% used)" | awk -F '[()]' '/Total Size:/ {split($2,a," "); print a[1]}'
    register: result

  - debug:
      msg: "{{ result.stdout }}"
它应该打印如下内容:

"msg": "2.0%"
如果工作正常,只需使用命令替换
echo…
inxi-D | awk…

注意
shell:>

yaml
中,可以将多行字符串写入“文字块”(使用
)或“折叠块”(使用


还将awk的用法更改为使用all-in-one,使用
[()]
作为分隔符,这将获取括号内的内容。

这样效果很好

 - name: Get informations about disk percentage
      shell: >
                inxi -D |
                grep 'Total'|
                sed -e 's/.*(\(.*\)\ .*/\1/'
      register: result

- debug:
      msg: "{{ result.stdout }}"

从3.0版起,inxi将导出为json或xml:

inxi -Dxxx --output json --output-file print

“print”是打印到标准输出,如果给出完整的文件路径,它将导出到文件。

我们只是找到了一个愚蠢的解决方法:

echo $(df -h /hadoop | awk 'NR==2 {print $4}') 
对于第一种情况:

      tasks:
      - name: test shell
        shell: echo $(inxi -D | awk '/Total Size:/ {print $7}' | cut -d"(" -f2)
        register: result

您从inxi-D | awk |总大小:/{print$7}| cut-D”(“-f2
”)中获得了什么输出?从线
驱动器中获得了2.0%:硬盘总大小:53.7GB(使用了2.0%)
ID-1:/dev/vda model:N/A size:53.7GB
`ID-2:/dev/vdb model:N/A size:0.0GB`您能否将just
inxi-D
的输出添加到您的问题中,以便它(1)保留正确的格式,并且(2)允许我们提出更好的方法?
echo$(命令)
是一个命令,应该是
命令
@ghoti我已经添加了infoI,我已经尝试过了,但它不起作用。
changed:[168.99.241.225]=>{“changed”:true,“cmd”:“inxi-D | awk'/总大小:/{print$7};cut-D\”(\“-f2”,“delta:“0:00:00.197516”,“end:“2018-05-20 17:38:12.433230”,“rc”:0,“start:”2018-05-17:38:234”,stderr:“,”stderr_行“:[],”stdout:“,”stdout_行“:[]}
grep
是完全不必要的;同样的过滤可以单独在sed中完成。那就
inxi-D | sed-ne'/^Drives/{s/*(/;s/*/*/;p;q;}'
呢?