使用awk解析/ proc / pid / smaps

时间:2012-10-29 08:39:46

标签: linux memory sed awk profiling

我正在寻找一个简短的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大小排序(首先是大块),则额外奖励

提前致谢,
   阿夫纳

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分: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 开头的行,请记住上次提到的文件中的数字。否则,如果提到文件,请记住它。在文件末端,按编号对记住的对进行排序并打印出来。