0

我正在寻找一个简短的 awk / sed 脚本来从 proc/smaps 文件中提取 rss 信息,该文件具有以下记录格式:

77f73000-77f74000 rw-s 00000000 fd:00 230116     /var/lib/mylib.so
Size:                 4 kB
Rss:                  4 kB
Shared_Clean:         0 kB
Shared_Dirty:         0 kB
Private_Clean:        4 kB
Private_Dirty:        0 kB

我正在寻找的输出是:

/var/lib/mylib.so 4
  • 如果记录可以按 rss 大小排序(大块优先),则额外奖励

提前致谢,
阿夫纳

4

2 回答 2

1

不确定您的选择标准,但这仅在列出实际路径时匹配:

awk 'NF > 3 { f = $NF } $1 ~ /^Rss/ && f ~ /\// { print f, $2 }'

追加sort -nr -k2,2对第二列进行降序排序。

于 2012-10-29T09:54:10.727 回答
0

Perl 解决方案:

perl -ne '
    if (/^Size:\s+([0-9]+)/) {
        $h{$f} = $1
    } elsif (m{\s(/.*)$}) {
        $f = $1
    }
    }{
    print "$_\t$h{$_}\n" for sort { $h{$a} <=> $h{$b} } keys %h
    ' input.txt

工作原理:如果读取以Size开头的行,请记住最后提到的文件中的数字。否则,如果提到文件,请记住它。在文件末尾,按数字对记住的对进行排序并打印它们。

于 2012-10-29T09:05:13.743 回答