使用 awk 解析 /proc/pid/smaps
Posted
技术标签:
【中文标题】使用 awk 解析 /proc/pid/smaps【英文标题】:Parsing /proc/pid/smaps with awk 【发布时间】:2012-10-29 08:39:46 【问题描述】:我正在寻找一个简短的 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 大小排序(大块优先),则额外奖励
提前致谢, 阿夫纳
【问题讨论】:
【参考方案1】:不确定您的选择标准,但这仅在列出实际路径时匹配:
awk 'NF > 3 f = $NF $1 ~ /^Rss/ && f ~ /\// print f, $2 '
追加sort -nr -k2,2
对第二列进行降序排序。
【讨论】:
【参考方案2】: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 开头的行,请记住最后提到的文件的编号。否则,如果提到文件,请记住它。在文件末尾,将记住的对按数字排序并打印出来。
【讨论】:
以上是关于使用 awk 解析 /proc/pid/smaps的主要内容,如果未能解决你的问题,请参考以下文章