Python 从矩阵中打印出值
我有一个任务,随着时间的推移,它会消耗arbit CPU和内存。它给我一个执行以下linux命令的输出:Python 从矩阵中打印出值,python,regex,linux,bash,Python,Regex,Linux,Bash,我有一个任务,随着时间的推移,它会消耗arbit CPU和内存。它给我一个执行以下linux命令的输出: mpstat-u 1-p ALL 输出如下所示: 02:22:14 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle 02:22:15 PM all 4.51 0.00 0.11 0.00 0.00 0.00 0.00 0.00
mpstat-u 1-p ALL
输出如下所示:
02:22:14 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
02:22:15 PM all 4.51 0.00 0.11 0.00 0.00 0.00 0.00 0.00 95.37
02:22:15 PM 0 0.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 99.00
02:22:15 PM 1 **78.22** 0.00 0.99 0.00 0.00 0.00 0.00 0.00 20.79
02:22:15 PM 2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
02:22:15 PM 3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
02:22:15 PM 4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:22:15 PM 5 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:22:15 PM 6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
02:22:15 PM 7 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:22:15 PM 8 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:22:15 PM 9 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:22:15 PM 10 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:22:15 PM 11 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:22:15 PM 12 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:22:15 PM 13 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:22:15 PM 14 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:22:15 PM 15 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
02:22:15 PM 16 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:22:15 PM 17 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:22:15 PM 18 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:22:15 PM 19 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
02:22:15 PM 20 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:22:15 PM 21 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:22:15 PM 22 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:22:15 PM 23 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
我想在bash/python/perl中每隔20秒获取第4列和第3行a[3][4]中的值,即78.22。
因此,我想要的脚本将执行mpstat命令并打印出指定列中的值,并基于这些值创建一个图形。我正在考虑在一个.dat文件中添加所需的值,然后运行一个gnuplot或and应用程序来创建图形
有什么建议吗?您可以使用
awk
获取第三行和第四个单元格。下面的代码从mpstat
的输出中获取此单元格,并将其与当前UNIX时间戳一起附加到统计文件中
mpstat -u 1 -P ALL | awk 'NR==4 {print systime(), $4}' >> stats.txt
要每20秒运行一次此命令,请执行以下操作:
watch -n 20 "mpstat -u 1 -P ALL | awk 'NR==4 {print systime(), \$4}' >> stats.txt"
然后用gnuplot
绘图:
cat stats.txt | gnuplot -p -e 'set datafile separator " "; plot "-" using 1:2 with lines'
您可以使用
awk
获取第三行和第四个单元格。下面的代码从mpstat
的输出中获取此单元格,并将其与当前UNIX时间戳一起附加到统计文件中
mpstat -u 1 -P ALL | awk 'NR==4 {print systime(), $4}' >> stats.txt
要每20秒运行一次此命令,请执行以下操作:
watch -n 20 "mpstat -u 1 -P ALL | awk 'NR==4 {print systime(), \$4}' >> stats.txt"
然后用gnuplot
绘图:
cat stats.txt | gnuplot -p -e 'set datafile separator " "; plot "-" using 1:2 with lines'
试试下面的方法
#!/bin/bash
function _mpstat() {
while :; do
arr=( $(mpstat -P 1 | tail -n 1) )
echo "${arr[3]}"
sleep 20
done >> file.txt
}
_mpstat &
echo "_mpstat PID: $!"
解释
while:;执行无限循环
mpstat仅cpu 1$(mpstat-p1 | tail-n1)
和tail-p1
最后一行,返回值-n1
$()
命令将值返回数组arr=(…)
echo数组索引3echo“${arr[3]}”
睡眠20秒睡眠20
在while循环块内将标准输出发送到文件>file.txt
将函数发送到后台进程\u mpstat&
&
返回函数的PIDecho”\u mpstat PID:$!
#!/bin/bash
function _mpstat() {
while :; do
arr=( $(mpstat -P 1 | tail -n 1) )
echo "${arr[3]}"
sleep 20
done >> file.txt
}
_mpstat &
echo "_mpstat PID: $!"
解释
无限循环while:;do
mpstat仅cpu 1$(mpstat-p1 | tail-n1)
和tail-p1
最后一行,返回值-n1
$()
命令将值返回数组arr=(…)
echo数组索引3echo“${arr[3]}”
睡眠20秒睡眠20
在while循环块内将标准输出发送到文件>file.txt
将函数发送到后台进程\u mpstat&
&
echo”\u mpstat PID:$代码>返回函数的PID
你可以在需要时对PID进行grep以显示它的父项并杀死它们。这样做:mpstat-u 1-p ALL | awk'NR==4{print systime(),$4}'>>stats.txt,stats.txt最终是一个空文件。另外,我看到的是,它不会连续打印出值,而是打印一次并停止。我的目标是持续记录CPU使用情况,直到进程运行为止,因此这还不够,但对其进行一些改进将是非常棒的。您可以使用
while
循环或(我最喜欢的)watch
重复该命令。更新了原始答案。您仍然看到一个空文件吗?(我不确定在你第二次评论之后。)在这样做时:mpstat-u 1-P ALL | awk'NR==4{print systime(),$4}'>>stats.txt,stats.txt最终是一个空文件。另外,我看到的是,它不会连续打印值,而是打印一次并停止。我的目标是持续记录CPU使用情况,直到进程运行为止,因此这还不够,但对其进行一些改进将是非常棒的。您可以使用while
循环或(我最喜欢的)watch
重复该命令。更新了原始答案。您仍然看到一个空文件吗?(在你第二次评论之后,我不确定。)