Linux shell脚本中的top命令

Linux shell脚本中的top命令,linux,shell,expect,Linux,Shell,Expect,我正试图通过expect脚本获取top命令的前5行。我从shell脚本调用这个expect脚本以及其他一些东西 top | head-5给出了下面的无cpu统计的输出ie- top-09:10:58最多46天,17:03,12个用户,平均负载:0.01,0.02, 0.00个任务:总共138个,1个正在运行,137个正在睡眠,0个停止,0个僵尸 成员:总计16432400k,使用8408096k,免费8024304k,609200k 缓冲区交换:总计6290736k,已使用0 K,空闲62907

我正试图通过expect脚本获取top命令的前5行。我从shell脚本调用这个expect脚本以及其他一些东西

top | head-5
给出了下面的无cpu统计的输出ie-

top-09:10:58最多46天,17:03,12个用户,平均负载:0.01,0.02, 0.00个任务:总共138个,1个正在运行,137个正在睡眠,0个停止,0个僵尸

成员:总计16432400k,使用8408096k,免费8024304k,609200k 缓冲区交换:总计6290736k,已使用0 K,空闲6290736k, 6754356k缓存

如果我在远程服务器上运行
top
命令,我可以看到在CPU状态行更新之前有2-3秒的延迟,有人能帮我获取所有5行更新的CPU状态吗?下面是我的预期脚本-

#!/usr/bin/expect -f
set user1 abc
set pass1 pass
set timeout 8
match_max 1000
spawn ssh -C -o stricthostkeychecking=no $user1@<ip>
expect "*?assword:*"
send  "$pass3\r"
expect "?xterm*"
send "\r"
send "top | head -5\r"
expect eof
#/usr/bin/expect-f
设置用户1 abc
设置通行证1通行证
设置超时8
匹配的最大值为1000
spawn ssh-C-o strichostkeychecking=no$user1@
应为“*?assword:*”
发送“$pass3\r”
预期为“?xterm*”
发送“\r”
发送“顶部|头部-5\r”
预期eof

您需要在
批处理模式下运行
top
,而不是默认的
交互模式。此外,您需要定义
top
为获取其度量值而执行的迭代次数

num_iterations=3
top -b -n $num_iterations | head -5
如果希望输出仅列出前5个进程并跳过显示的统计标题,可以尝试以下操作:

num_iterations=3
top -b -n $num_iterations | sed -n '8,12p'
还可以根据您的需要调整
num_iterations
的值

top -b -n 2 -u $(whoami) | grep -A6 -B5 PID |tail -12
根据要求调整以下数值

grep
-A$after\u行\u计数
-B.在计算前支付$

尾部-$($after+$before+1)

尾值应为[行计数前+行计数后+1(PID匹配行)]

如果您不需要特定于用户的详细信息

  top -b -n 2 | grep -A6 -B5 PID |tail -12

注意:top迭代次数为2次(top-n2),即显示输出需要6秒(取决于每次迭代设置的延迟)

是正确的。您可以根据应用程序需要调整num_迭代的值。您的意思是在expect脚本中我需要添加set num_迭代3,并发送“top-b-n$num_迭代| head-5”?如果是这样,我在没有CPU统计数据的情况下得到相同的输出,我们可以在输出通过管道传输到head命令之前指定等待x秒吗?您只需要前5个进程的输出吗?我发现用
head-12
替换
head-5
列出了前5个流程。如果您想跳过标题并仅获取前5个进程的信息,可以执行
top-b-n3 | sed-n'8,12p'
。sed命令选择输出中的第8-12行。感谢您的帮助,Tuxdude,它对我不起作用。无论我尝试什么,cpu统计数据都不会填充。尝试top-b-n2。这将在第二次迭代中返回cpu%。如果您只需要五行代码,请使用“top-b-n2 | grep-b6pid | tail-7 | head-5”