2017-05-30 114 views
0

我有这个脚本在外壳的bash:在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

我不明白你想用第一个顶部实现什么。你将拥有顶部的所有第10和11列,头部(僵尸,平均负载等)。另外,你的'awk'命令不会打印任何东西,所以你不会得到任何结果,它应该是这样的:'awk'{print $ 10“'$ 11}'' – Esteban

+0

如果你想实现的是有一个头在你的文件对应的顶级命令之一,你应该尝试这样的: 'top -b -n 1 | grep“PID USER”| tee agent.csv spark.csv kafka.csv zk.csv engine.csv ' – Esteban

回答

0

top无休止地运行。如果您只想运行一次,则使用选项-n来指定迭代次数,就像您在for循环中已经完成的那样。此外,使用选项-b启用批处理模式也很有用:top -b -n 1

请注意,一次迭代不会返回当前所有进程的CPU使用率,而是自启动以来的平均CPU使用率。

0

您可以使用以下命令:

top -n 1 | grep -e CPU -e MEM | awk'{print $ 10''$ 11}'> agent.csv

top -n 1只打印出1个顶部输出,而不是每1秒周期性刷新(默认)。

grep将输出的ROWs搜索为2种模式CPU和MEM(多表达式搜索使用-e选项完成)。当它被发现时,它将是顶级输出的第0行,它将作为输入传递给awk语句。

awk语句然后只将CPU和MEM列打印到您的文件中。