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

来源:互联网 发布:网络爬虫可以做什么 编辑:程序博客网 时间:2024/06/09 18:59

问题:解决如何使用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()   #第一行是各列的名字  endendtop_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  endend#按照第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(" ")  endend

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

0 0
原创粉丝点击