【问题标题】:Stripping Specific Information with Bash使用 Bash 剥离特定信息
【发布时间】:2019-06-19 20:43:03
【问题描述】:

我有一个小 bash 脚本,用于查看戴尔服务器上的机箱温度。该脚本将针对 Icinga2 的 50 台服务器运行,并通过 Influxdb 将结果报告给 Granfana。我需要从以下输出中获取临时值:

Temperature Probes Information

--
Probe Name                : System Board Inlet Temp
Reading                   : 21.0 C
--
Probe Name                : CPU1 Temp
Reading                   : 39.0 C

我正在考虑使用 awk 来打印值(回显不带引号的变量,awk '{print $14}' 会给我 21.0 作为示例。

问题是我有一些带有 2 个 CPU 的服务器,并且 awk 位置会有所不同

到目前为止,我收集上述输出的代码是:

HOST=$1

dell_probes=$(ssh someUser@${HOST} "/opt/dell/srvadmin/sbin/omreport chassis temps | grep Probe -A1")

echo "$dell_probes"

我还没有尝试过任何 sed/awk 解决方案,只是不确定最优雅的方法是什么。

我希望输出如下所示,以便可以将其与 influxdb 一起使用:

echo "$mb_temp"
21.0

echo "$cpu1_temp"
39.0

echo "$anyother_cpu_listed"
39.1

【问题讨论】:

  • 这可能是朝着正确方向迈出的一步:| awk -F ' : | C' '/Probe Name/{name=$2} /Reading/{print name,$2}'
  • 没关系,谢谢。我如何使用上面的方法将输出分配给单独的变量?当我回显变量时,它显示为System Board Inlet Temp 23.0, CPU1 Temp 39.0

标签: bash awk grep grafana influxdb


【解决方案1】:

使用数组。我会用sed 加载它。

$: temps=( $(  sed -nE '
     /^Reading / {
       s/^Reading *: *([0-9.]+).*/\1/;
       p; 
     }
   ' input ) )
$: for t in "${!temps[@]}"
> do echo "Temp for CPU $t - > ${temps[$t]}"
> done
Temp for CPU 0 - > 21.0
Temp for CPU 1 - > 39.0

【讨论】:

  • 那么对于数组中的每个项目,它只会循环遍历吗?有什么方法可以分配给变量吗?例如,MB 是一个独立于 CPU1 的值,这些需要是 vars。需要能够在 Grafana 中使用此输出。也感谢您的回复,不胜感激。
  • ${!temps[@]}"(注意!)将${temps[@]}"索引返回到$t,它会循环遍历......这能回答你的问题吗?
【解决方案2】:

在使用 awk 时,您永远不需要 grep。这可能是您需要的:

$ cat tst.sh
#!/bin/env bash

declare -A temps="( $(
    #/opt/dell/srvadmin/sbin/omreport chassis temps |
    cat file |
    awk -F'[[:space:]]*:[[:space:]]*' '
        f { sub(/ .*/,"",$NF); printf "[%s]=\"%s\"\n", name, $NF; f=0 }
        $1 == "Probe Name" { name=$2; sub(/ Temp$/,"",name);  gsub(/ /,"_",name); f=1 }
    '
) )"

printf '%s\n' "${temps[System_Board_Inlet]}"

printf '%s\n' "${temps[CPU1]}"

$ ./tst.sh
21.0
39.0

我使用了cat file 而不是我注释掉的真实命令,因为这就是我现在必须用作输入的全部内容。

【讨论】:

    猜你喜欢
    • 2016-09-01
    • 1970-01-01
    • 2016-12-23
    • 2015-02-07
    • 1970-01-01
    • 2016-04-03
    • 2015-12-27
    • 1970-01-01
    相关资源
    最近更新 更多