Shell脚本:top命令和日期命令

时间:2016-10-11 15:48:37

标签: bash shell scripting centos7 top-command

我想在文件中打印进程的cpu使用百分比(top命令)+此top命令获取信息的日期,每0.5秒(每行包含日期+此cpu信息) 如果我用shell脚本编写,我会做类似的事情

while [ ! -f $STOP_FILE ]
do
echo "$(date +%s.%N)" >> $REPORT_FILE
top -b -n 1 -p myProcessPID | grep myProcessName | awk -F " " '{print $12 "\t" $9}' >> result.txt
sleep 0.5
done

但我不能在top中使用-n 1选项来获取cpu信息,因为第一次迭代是"from system boot until now"所以我需要其他迭代。

因此,我正在寻找一些命令组合来获取顶级命令的过程信息+一个纳秒的日期(日期+%s。%N)(顶部命令也会在标题的第一行中产生一个时间) ,但我想要毫秒)

我正在尝试类似的事情,

echo $(date +%s.%N) $(top -d 0.5 -n 100 -p myProcessPID | grep myProcessName) >> results.txt

但日期仅在第一次迭代时打印。

有什么想法吗?

对不起,如果我对这个问题不是很准确,我是这个脚本的新手并在这里写...

1 个答案:

答案 0 :(得分:2)

您可以通过管道topawk的输出,并让awk运行date来实现此目的。例如:

top -d 0.5 -n 100 -p myProcessPID \
   | awk '/myProcessName/ { system("date +%s"); print $0 }'

您可以通过调整awk程序对输出格式进行任意控制。另请注意,您不需要单独的grep,因为awk的内部模式匹配非常适合。