【发布时间】:2014-01-23 05:36:21
【问题描述】:
我正在尝试制作一个根据负载对机器进行排序的程序,但我很难解析 ssh 输出。我到目前为止是这样的:
gen_data()
{
declare -a machines=("machine1" "machine2" "machine3" "machine4" "machine5")
for i in ${machines[@]}; do
ssh $i "hostname && uptime"
done | awk ' BEGIN {cnt=0} \
{ printf("%s, ", $0)
cnt++
if(cnt % 3 == 0) {printf("\n") }
}' > ~/perf_data
}
#function check_data
# check for load averages (fields 6,7,8) which are greater than 7
check_data()
{
awk -F"," '{ if($6 < 9.0 && $7 < 9.0 && $8 < 9.0)
{print $0 }
}' ~/perf_data
}
大部分代码是代码的修改版本,它检查机器负载并在它太高时通过电子邮件发送给您,但我无法完全让它打印出机器名称或正确制作 perf_data 文件。
我想要得到的是机器列表 me@machine*.network.com,程序测试机器的负载,如果它足够低,它会打印机器名称:
me@machine1.network.com me@machine5.network.com me@machine10.network.com
这样我可以将输出通过管道传输到另一个将使用这些机器的程序。
由于我是 awk 中的 n00b,因此我真的需要帮助。
【问题讨论】:
-
将一些示例输入发布到第一个 awk 命令(即 ssh 循环的输出)以及给定该输入的该 awk 命令的预期输出,并解释原因。如果您也需要帮助,请对您的第二个 awk 脚本执行相同操作。
-
添加了示例输入和输出。
-
在我看来不像。请记住 - 我们需要从每个 awk 脚本的角度输入和输出,因为这就是您要求我们帮助您编写的内容。想想您的 awk 脚本将什么视为输入,而不是整个脚本的总体目标。
标签: performance bash ssh awk load