假设下面是mpstat-log.txt文件,我该如何解析文件的结果并获得前4个CPU 0-3的%idle字段。我的猜测是这是grep,sed,cut或awk的工作,但我没有足够的经验知道哪个是用于工作的最佳实用工具。
#!/bin/bash for cpuIndex in {0..3} do # Get percent idle from line of specified cpuIndex cpuPercentIdle= # How to get a desired line and space separated field number? # Can you do math in a bash script ? cpuPercentUsed=$((100 - $cpuPercentId)) echo "CPU $cpuIndex : Idle=$cpuPercentIdle, Used=$cpuPercentUsed" done done
脚本输出:
CPU 0 : Idle=45.18, Used=54.82 CPU 1 : Idle=96.33, Used=3.67 CPU 2 : Idle=95.65, Used=4.35 CPU 3 : Idle=72.09, Used=27.91
文件:mpstat的-log.txt的
Average: CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s Average: all 10.95 0.00 0.42 0.00 0.04 0.25 0.00 88.34 1586.71 Average: 0 51.50 0.00 3.32 0.00 0.00 0.00 0.00 45.18 0.00 Average: 1 3.67 0.00 0.00 0.00 0.00 0.00 0.00 96.33 2.66 Average: 2 4.35 0.00 0.00 0.00 0.00 0.00 0.00 95.65 0.00 Average: 3 27.57 0.00 0.33 0.00 0.00 0.00 0.00 72.09 997.34 Average: 4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 10.96 Average: 5 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 0.00 Average: 6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 0.00 Average: 7 0.00 0.00 0.00 0.00 0.00 1.67 0.00 98.33 575.75
提前感谢任何指导和提示!
答案 0 :(得分:3)
几乎所有你提到的工具都能以这种或那种方式完成工作。这是一个有awk ...
awk '{ if ( $2 <= 3 ) print $10; }' mpstat-log.txt
答案 1 :(得分:2)
使用awk的解决方案:
{ if($2 ~ /[0-3]/) {
print $10
}
}
给出:
$ awk -f t.awk input
45.18
96.33
95.65
72.09
在纯粹的bash中,或许是这样的事情:
#!/bin/bash
while read -a ARRAY
do
if [[ "${ARRAY[1]}" =~ [0-3] ]]; then
echo ${ARRAY[9]}
fi
done < input
给出:
45.18
96.33
95.65
72.09
Bash不能进行浮点运算,因为你可以使用bc
。有关如何使用bc
为您进行数学运算,请参阅此link。
答案 2 :(得分:1)
$ awk '$2~/^[0-3]$/ {printf "CPU %d : Idle=%.2f, Used=%.2f\n",$2,$10,100-$10}' mpstat-log.txt
CPU 0 : Idle=45.18, Used=54.82
CPU 1 : Idle=96.33, Used=3.67
CPU 2 : Idle=95.65, Used=4.35
CPU 3 : Idle=72.09, Used=27.91