首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Linux对基于行值的输出进行排序

用Linux对基于行值的输出进行排序
EN

Stack Overflow用户
提问于 2022-08-29 12:00:34
回答 1查看 29关注 0票数 0

我需要打印整个输出排序,根据‘常驻设置大小’的价值。

工艺: wccpd

内存(字节)

总虚拟尺寸29.5

常驻集大小4.0

过程:回记

内存(字节)

总虚拟尺寸0

驻留集大小0

工艺: zxfrd

内存(字节)

总虚拟尺寸71.3

驻地设置尺寸3.9

EN

回答 1

Stack Overflow用户

发布于 2022-08-29 12:38:53

perl非常擅长这类事情:

代码语言:javascript
复制
#!/usr/bin/env perl

use 5.12.0;
$/ = "";  # enable "paragraph mode"

my @f;
while(<DATA>) {
    m/Resident Set Size (.*)/;
    push @f, [$1, $_];
}
say $_->[1] foreach sort { $a->[0] <=> $b->[0] } @f;


__DATA__
Process: wccpd
Memory (bytes)
Total Virtual Size 29.5
Resident Set Size 4.0

Process: writeback
Memory (bytes)
Total Virtual Size 0
Resident Set Size 0

Process: zxfrd
Memory (bytes)
Total Virtual Size 71.3
Resident Set Size 3.9

这个想法很简单。将$/ (又名$INPUT_RECORD_SEPARATOR$RS)设置为空字符串会使perl处于“段落模式”,其中记录由空行分隔。然后,我们一次只读取一条记录,并解析每条记录以匹配“驻留集大小”,并找到希望对其进行排序的值。然后,我们推送一个数组引用,其中包含1中的值in和整个记录,然后使用<=>操作符比较排序函数中的记录。

如果您的输入在文件input中,并且希望直接执行类似的操作,您可以这样做:

代码语言:javascript
复制
perl -00 -nE 'm/Resident Set Size (.*)/; push @f, [$1, $_]}
    { say $_->[1] foreach sort { $a->[0] <=> $b->[0] } @f' input

这与上面的脚本完全相同,其中-n执行while(<>)循环,-00启用段落模式。奇怪的错配的} {是一个perl成语,与-n一起使用。-n标志基本上在整个脚本周围放置一个while(<>){ }循环,我们将用第一个}关闭该循环,并将其结束大括号与(似乎无法匹配的) {匹配。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73528473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档