在bash脚本中使用for循环

时间:2017-05-30 07:29:45

标签: linux bash shell for-loop

我在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的名称。 在循环内我试图获得特定的过程 然后将它们放在每个进程的每个文件的文件中

我没有得到我想要的东西。 没有写入文件。

2 个答案:

答案 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列打印到您的文件中。