ruby 按照cpu的使用率对top中的进程排序(排序表格)

问题:解决如何使用ruby对表格(二维数组)进行排序?例如,按照cpu或mem的使用率对top中的进程排序,选出cpu最高的进程

解决方法: 使用二维数组存储表格,然后按照cpu使用率排序整个二维数组,选出cpu最高的那一行

假设top信息存在于与脚本同目录的txt文件中。具体信息如下:
这里写图片描述

代码:

top_info_lines = []
column_names = []
#获取top信息需要处理的部分
top_info = IO.readlines('top_info.txt')[6..-1]
top_info.each do |line|
  if line =~ /.*\%.*/
  column_names = line.split()   #第一行是各列的名字
  end
end

top_info_lines = top_info[1..-1]   #只获取带数字的信息部分

arr = Array.new(top_info_lines.size){Array.new(8) {0}}   #创建二维数组,初始值为0
#将要排序的信息存进二维数组
top_info_lines.each_with_index do |x, row|
  x.to_s.gsub(/\r\n?/, "").split().each_with_index do |y, col|
    arr[row][col] = y
  end
end

#按照第8列正序,第9列反序的方式排序
arr_sort = arr.sort_by{|a| [a[8].to_i, -a[9].to_i]}

if __FILE__ == $0
  puts "the top info is :"
  puts column_names.join(" ")
  arr_sort.each do |element|
    puts element.join(" ")
  end
  puts "****************************"
  max_cpu_min_mem = []

  #选出第8列值最大的行
  max_cpu = arr_sort.map {|a| a[8].to_i }.max
  max_cpu_lines = arr_sort.select{|a| a[8].to_i == max_cpu}
  #从第8列值最大的行中,选出第9列值最小的行
  min_mem = max_cpu_lines.map {|a| a[9].to_i }.min
  max_cpu_min_mem = max_cpu_lines.select{|a| a[9].to_i == min_mem}
  puts "the top info with max cpu and min mem is :"
  max_cpu_min_mem.each do |element|
    puts element.join(" ")
  end
end

运行结果:
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值