需要帮助解析bash中的字符串

时间:2011-06-05 17:49:54

标签: bash sed awk

我有一个脚本使用传感器来获取Ubuntu中的CPU临时值。

IN="`/usr/bin/sensors -f | grep 'Core ' | cut -f2 -d"+" | cut -f1 -d '.'`"
echo $IN

它会产生这样的结果

96 100 98 102

我需要做的是能够像cpu1一样调用它来获取第一个,cpu2来获取第二个,依此类推。我需要拆分它以便我可以使用MRTG监控核心温度,可能有更好的方法,但我还没找到。

3 个答案:

答案 0 :(得分:4)

您可以将$IN转换为如下数组:

TEMPERATURES=($IN)

然后你可以索引到那个数组以获得特定的温度;例如:

echo ${TEMPERATURES[0]}

如果将命令行参数传递给脚本,则可以将其用作数组索引:

WHICH=$1                       # 1st command line arg; $0 is name of script
TEMPERATURES=($IN)
echo ${TEMPERATURES[$WHICH]}

对脚本的调用可能如下所示(假设脚本名为cpu):

$ ./cpu 0
96
$ ./cpu 1
100
$ ./cpu 2
98
$ ./cpu 3
102

答案 1 :(得分:2)

IN="96 100 98 102"       

I=0
for val in $IN; do
  I=$((I+1))
  eval "cpu$I=$val"
done

echo $cpu1

我从字面上回答了如何获得$ cpu1等,但我建议你做@Richard建议的并使用数组:)

答案 2 :(得分:1)

您可以使用awk在单个管道中执行此操作,而不是使用大量管道来提取CPU温度:

#!/bin/sh
/usr/bin/sensors -f | awk -F"[+.]" -v c="^Core $1" '$0~c{print $2}'

用法:

$./cpu 0
$./cpu 1
$./cpu 2
相关问题