2012-10-29 57 views
0

我正在尋找一個短的awk/sed腳本提取從PROC RSS信息/ smaps它具有以下記錄格式文件:解析的/ proc/PID/smaps使用awk

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大小進行排序(大塊第一)

在此先感謝,
阿夫納

回答

1

不知道你的選擇標準,但實際的路徑上市的時候這只是比賽:

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

追加sort -nr -k2,2做下來在第二列排序。

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 

它是如何工作的:如果一個符合尺寸開始閱讀,請記住在最後提到的文件數量。否則,如果提到一個文件,請記住它。在文件結尾,按照編號對記住的對進行排序並打印出來。