linux - For-loop + echo 改变了我输出的所需格式

标签 linux bash for-loop echo

所以我正在编写一个脚本,以从预先存在的脚本中获取输出的特定部分,并通过 HTTP POST 发送它们。

我需要按以下格式发送它们:blade.$hostname.cpu=$cpuvalueblade.$hostname.mem=$memvalue with $hostname、$cpuvalue 和 $memvalue 是前面提到的脚本的输出。

我尝试了以下方法:

#!/bin/bash

for n in {10..11}
do
  name=`./getdata.v7 $1 $2 | grep LINX"$n" | cut -c1-6`
  cpu=`./getdata.v7 $1 $2 | grep LINX"$n"_processor-usage | cut -c24-25`
  mem=`./getdata.v7 $1 $2 | grep LINX"$n"_memory-usage | cut -c21-22`
  echo -e "blade.$name.cpu=$cpu\nblade.$name.mem=$mem"
done

但是当我运行脚本时,我得到了这个结果:

blade.LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10.cpu=2

blade.LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10 LINX10.mem=96

任何人都可以帮助我了解我需要更改什么才能只获得 LINX10 部件一次而不是 36 次(是的,我数过了)?

我写的东西可能有一个非常愚蠢的错误,但我是 bash 的新手,无论我尝试什么,我都无法让它工作。

最佳答案

首先,我只会调用一次./getdata.v7:

data=$(./getdata.v7 "$1" "$2")

然后我会手动写出 10 11 因为你真的不需要两个单词的大括号扩展:

for n in 10 11; do

然后,我只想要来自 grep 的第一个匹配项,因为它似乎在多行上匹配 LINX$n

name=$(fgrep "LINX$n" <<< "$data" | head -n 1 | cut -c1-6)
cpu=$(fgrep "LINX${n}_processor-usage" <<< "$data" | head -n 1 | cut -c24-25)
mem=$(fgrep "LINX${n}_memory-usage" <<< "$data" | head -n 1 | cut -c21-22)

注意我使用的是 fgrep 而不是 grep 因为匹配不需要是正则表达式。整个管道可能可以在单个 awk 语句中重写,但我们不需要去那里。

然后,为了可读性,我会使用 printf 而不是 echo:

printf 'blade.%s.cpu=%s\n' "$name" "$cpu"
printf 'blade.%s.mem=%s\n' "$name" "$mem"

关于linux - For-loop + echo 改变了我输出的所需格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22356334/

相关文章:

linux - 没有使用 Net::SFTP::Foreign 的非 root 连接

linux - 子项目是否应该继承父文件夹的权限?

bash - 如何将 bash 命令的输出传递给 Github Action 参数

Bash:缓存命令导致别名?

c - 如何在 C 中用零填充和取消填充 2D 矩阵?

Python - 仅返回 for 循环语句中的第一个值

c++ - 非规范模式

linux - 来自文件的 Bash 总和

git - .gitconfig 不遵循默认编辑器命令的 bash 别名?

c++ - 关于C++中的随机数