2016-10-24 2 views
0

Я пытаюсь получить значение строк с тем же именем в файле smap с помощью bash, но я не знаю, как это сделать. Например, мне нужно получить значение каждой строки, начиная с «Size:» int, чтобы получить общий размер. Каков наилучший способ сделать это?Чтение/proc/pid/smaps

Пример SMAP файла:

enter image description here

+0

Пожалуйста, не публикуйте изображения. Опубликовать текст – hek2mgl

ответ

1

Я предполагаю, что размер дал только в кбайт

#!/usr/env/bin bash 
sum=0 
grep "^Size:" /proc/pid/smaps | (while read line 
do 
size=$(echo "$line" | tr -s '\t' ' ' | cut -d' ' -f2) 
sum=$((sum + size)) 
done 
echo $sum) | xargs -I{} echo "total size: {} kB" 

1- Получить все строки размера

grep "^Size:" /proc/pid/smaps 

2 - Re trieve интересной части текущей строки с совпадением и perfom вещей на нем (в нашем случае Подведет)

while read line 
do 
size=$(echo "$line" | tr -s '\t' ' ' | cut -d' ' -f2) 
sum=$((sum + size)) 
done 

Затем заключите его в круглые скобки ти с echo вытаскивать значение while заявления

| (while read line 
do 
size=$(echo "$line" | tr -s '\t' ' ' | cut -d' ' -f2) 
sum=$((sum + size)) 
done 
echo $sum) | 

3- Теперь общий размер доступен из трубы, и вы можете использовать его

xargs -I{} echo "total size: {} kB" 
0
#!/bin/bash 
SUM=0 
while read -r line 
do 
    f=($line) 
    if [ "${f[0]}" == "Size:" ] 
    then 
     size=$(numfmt --from=iec --suffix=B "${f[1]}${f[2]^^}") 
     SUM=$(($SUM + ${size: : -1})) 
    fi 
done < /proc/$$/smaps 
echo "I have $(numfmt --to=iec $SUM) in /proc/$$/smaps!" 

Вышеупомянутые скриптовые петли /proc/$$/smaps, разделяющие каждую строку пробелами, затем используют numfmt для преобразования любого значения Size в байты.