我需要打印整个输出排序,根据‘常驻设置大小’的价值。
工艺: wccpd
内存(字节)
总虚拟尺寸29.5
常驻集大小4.0
过程:回记
内存(字节)
总虚拟尺寸0
驻留集大小0
工艺: zxfrd
内存(字节)
总虚拟尺寸71.3
驻地设置尺寸3.9
发布于 2022-08-29 12:38:53
perl非常擅长这类事情:
#!/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中,并且希望直接执行类似的操作,您可以这样做:
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(<>){ }循环,我们将用第一个}关闭该循环,并将其结束大括号与(似乎无法匹配的) {匹配。
https://stackoverflow.com/questions/73528473
复制相似问题