Shell 如何通过Ansible使用AWK命令
我在创造一个负责任的角色方面有问题 我想在shell模块中使用awk通过Ansible注册变量 当我通过终端使用它时,它工作如下: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 显示的信息
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`您能否将justinxi-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;}'
呢?