如何用正则与grep过滤Android应用mobile_cep的内存占用值并计算平均值
解决adb meminfo输出重复并提取内存数值的方案
我来帮你搞定这个问题——dumpsys meminfo输出重复行大概率是因为命令输出里存在两处匹配mobile_cep的条目,不过不管具体原因,我们用几个简单的命令行工具就能快速解决,还能直接提取出方便计算平均值的数值。
1. 先去掉重复的输出
你的重复行是连续的,直接用uniq命令就能去重:
adb shell dumpsys meminfo | grep mobile_cep | uniq
执行后就只会保留唯一的一行结果:234,467K: org.carleton.iot.mobile_cep (pid 27060 / activities)
2. 提取纯数字内存值(方便后续计算)
如果要把带逗号和K的字符串转成纯整数,用awk做个简单的字符串替换就行:
adb shell dumpsys meminfo | grep mobile_cep | uniq | awk '{gsub(/,|K/,"",$1); print $1}'
这个命令会输出234467,直接是整数格式,后续计算平均值会非常方便。
3. 多次采样并计算平均值
写个简单的bash脚本,循环指定次数获取内存值,累加后算出平均值:
#!/bin/bash # 设置要采样的次数 sample_count=10 total_memory=0 for ((i=1; i<=sample_count; i++)) do # 获取处理后的纯数字内存值 current_mem=$(adb shell dumpsys meminfo | grep mobile_cep | uniq | awk '{gsub(/,|K/,"",$1); print $1}') # 累加到总和里 total_memory=$((total_memory + current_mem)) # 每次采样间隔1秒,可根据需求调整时间 sleep 1 done # 计算整数平均值 average=$((total_memory / sample_count)) echo "Average memory usage over ${sample_count} samples: ${average}K"
如果需要更精确的浮点平均值,把最后计算的部分改成下面这样(需要系统安装bc工具):
average=$(echo "scale=2; $total_memory / $sample_count" | bc) echo "Average memory usage over ${sample_count} samples: ${average}K"
额外小技巧
其实dumpsys meminfo可以直接指定进程包名,减少冗余输出,甚至可能从根源避免重复:
adb shell dumpsys meminfo org.carleton.iot.mobile_cep | awk '/TOTAL/ {print $2}'
这个命令直接提取进程的总内存数值(不同Android版本的输出格式可能略有差异,需要确认TOTAL行的位置),比先grep再处理更高效。
内容的提问来源于stack exchange,提问作者Amarjit Dhillon
相关产品推荐
相关产品推荐

