我在shell bash中有这个脚本:
top | awk '{$10 $11}'> agent.csv
top | awk '{$10 $11}'> spark.csv
top | awk '{$10 $11}'> kafka.csv
top | awk '{$10 $11}'> zk.csv
top | awk '{$10 $11}'> engine.csv
for ((;;))
do
top -b -c -d 2 n 10 | grep agent >> agent.csv;
top -b -c -d 2 n 10 | grep spark >> spark.csv
top -b -c -d 2 n 10 | grep kafka >> kafka.csv
top -b -c -d 2 n 10 | grep zookeeper >> zk.csv
top -b -c -d 2 n 10 | grep engine >> engine.csv
sleep 10;
done &
我想在循环之前尝试使用'awk'命令来获得指标%CPU和%MEM的名称。 在循环内我试图获得特定的过程 然后将它们放在每个进程的每个文件的文件中
我没有得到我想要的东西。 没有写入文件。
答案 0 :(得分:0)
top
无休止地奔跑。如果您只想运行一次,那么使用选项-n
来指定迭代次数,就像您在for循环中已经完成的那样。此外,启用带有选项-b
的批处理模式也非常有用:top -b -n 1
。
请注意,单次迭代不会返回所有进程的当前 CPU使用率,而是返回自启动以来的平均CPU使用率。
答案 1 :(得分:0)
您可以使用以下命令:
top -n 1 | grep -e CPU -e MEM | awk' {print $ 10" " $ 11}' > agent.csv
top -n 1只打印出1个顶部输出,而不是每1秒定期刷新一次(默认)。
grep在输出的ROW中搜索2个模式CPU和MEM(使用-e选项完成多个表达式搜索)。当找到它时,它将是顶部输出的第0行,它将作为输入传递给awk语句。
awk语句然后只将CPU和MEM列打印到您的文件中。