[英]Sorting output based on row value with Linux bash
我需要打印基于“驻留集大小”值排序的整个 output。
进程:wccpd
Memory(字节)
总虚拟大小 29.5
居民集大小 4.0
过程:回写
Memory(字节)
总虚拟大小 0
居民集大小 0
进程:zxfrd
Memory(字节)
总虚拟大小 71.3
居民套装尺寸 3.9
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
置于“段落模式”,其中记录由空行分隔。 然后我们一次读取文件一条记录并解析每条记录以匹配“驻留集大小”并找到您希望排序的值。 然后我们推送一个由 [0] 中的值和 [1] 中的整个记录组成的数组引用。 然后使用<=>
运算符比较排序 function 中的记录。
如果您在文件input
并想直接执行类似的操作,您可以执行以下操作:
perl -00 -nE 'm/Resident Set Size (.*)/; push @f, [$1, $_]}
{ say $_->[1] foreach sort { $a->[0] <=> $b->[0] } @f' input
这与上面的脚本完全相同,其中-n
执行while(<>)
循环,而-00
启用段落模式。 奇怪的不匹配} {
是用于-n
的perl
成语。 -n
标志基本上在整个脚本周围放置了一个while(<>){ }
循环,我们用第一个}
关闭该循环,并将其右大括号与(看似不匹配的) {
匹配。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.