如何按CPU使用率降序排列txt文件中的服务器CPU与时间对应数据
解决成对行按CPU使用率降序排序的问题
看起来你遇到的核心问题是每两个行对应一个服务器的完整信息,普通的sort命令只会单独处理每一行,没法把CPU行和对应的时间行绑定在一起排序。下面给你一个简洁的解决方案,能完美实现你想要的结果:
解决方案命令
awk 'NR%2==1 {cpu_line=$0; getline time_line; print cpu_line "\t" time_line}' your_file.txt | sort -k6,6rn | tr '\t' '\n'
命令分步解释
AWK合并成对行:
NR%2==1:判断当前行是奇数行(也就是CPU信息行)- 把CPU行存入
cpu_line变量,然后用getline读取下一行(时间信息行)存入time_line - 用制表符
\t把两行合并成一行输出,这样每个服务器的两组信息就变成了单行,方便后续排序
Sort按CPU使用率排序:
-k6,6rn:指定按合并行的第6个字段(也就是CPU使用率数值,比如22%)排序r:倒序排列(降序)n:按数值大小排序(sort会自动忽略%符号,只比较前面的数字)
TR恢复换行格式:
tr '\t' '\n':把合并时用的制表符换回换行符,这样就恢复了你想要的“CPU行+时间行”成对的格式
为什么你之前的命令无效?
你用的sort -t: -k2,2rn <filename是把每一行单独处理:
- 它以冒号
:为分隔符,取第2个字段排序,但只有CPU行有usage:这样的冒号结构,时间行没有,所以排序后只会保留符合规则的行,而且没法把时间行和CPU行关联起来,自然得不到正确的结果。
测试验证
用你提供的原始文件内容运行上面的命令,会直接输出你期望的排序结果:
Server-PROD~]$ show cpu cpu usage: 22% used
Server-PROD~]$ show time Thu Sep 26 11:25:37
Server-QA~]$ show cpu cpu usage: 18% used
Server-QA~]$ show time Thu Sep 26 11:25:32
Server-DEV~]$ show cpu cpu usage: 16% used
Server-DEV~]$ show time Thu Sep 26 11:25:06
Server-STAGE~]$ show cpu cpu usage: 11% used
Server-STAGE~]$ show time Thu Sep 26 11:26:05
内容的提问来源于stack exchange,提问作者anukalps
相关产品推荐
相关产品推荐

