首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过Ansible使用AWK命令

如何通过Ansible使用AWK命令
EN

Stack Overflow用户
提问于 2018-05-21 01:13:27
回答 5查看 15.3K关注 0票数 2

我在创建ansible角色时遇到了问题。

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

当我像这样通过终端使用它时,它可以工作:

代码语言:javascript
复制
inxi -D | awk '/Total Size:/ {print $7}' | cut -d"(" -f2

但是当我想在Ansible角色中使用它时,它就不起作用了。

代码语言:javascript
复制
name: Get info
shell: inxi -D | awk '/Total Size:/ {print $7}' | cut -d"(" -f2
register: result

来自inxi -D的显示信息是

代码语言:javascript
复制
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%

有人能帮上忙吗?

EN

回答 5

Stack Overflow用户

发布于 2018-05-21 20:39:29

这种方式可以很好地工作

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

- debug:
      msg: "{{ result.stdout }}"
票数 2
EN

Stack Overflow用户

发布于 2018-05-21 02:51:58

试一下这个:

代码语言:javascript
复制
---
- 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 }}"

它应该打印类似这样的内容:

代码语言:javascript
复制
"msg": "2.0%"

如果工作正常,只需用您的命令替换echo ...inxi -D | awk ...

请注意shell: >

yaml中,多行字符串既可以写成“文字块”(使用|),也可以写成“折叠块”(使用>)。

还改变了awk的用法,通过使用[()]作为分隔符来使用all in one,这将获得括号中的内容。

票数 1
EN

Stack Overflow用户

发布于 2018-05-21 01:31:43

尝试按如下方式执行:

代码语言:javascript
复制
 name: Get info
 shell: inxi -D | awk '/Total Size:/ {print $7}' | cut -d"(" -f2
 register: result

并通过"{{ result.stdout }}"访问该命令的输出

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50437456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档