题解 | #ps分析-统计VSZ,RSS各自总和#
ps分析-统计VSZ,RSS各自总和
http://www.nowcoder.com/practice/7094b5f96e1a4c998ce01baf407beee6
#! /usr/bin/env bash
########################################################
#
#
########################################################
function solution_1() {
echo "MEM TOTAL"
local array=""
local is_first_line=true
VSZ_SUM=0
RSS_SUM=0
while read line; do
[[ "${is_first_line}" = "true" ]] && is_first_line=false && continue
array=(${line})
VSZ_SUM=$(( ${array[4]} + ${VSZ_SUM} ))
RSS_SUM=$(( ${array[5]} + ${RSS_SUM} ))
done < nowcoder.txt
#VSZ_SUM=`awk -v x=${VSZ_SUM} 'BEGIN {print "%.3f", x/1024}'`
#RSS_SUM=`awk -v x=${RSS_SUM} 'BEGIN {print "%.3f", x/1024}'`
local old_ifs="${IFS}"
IFS="."
local length=0
local str=""
VSZ_SUM=`echo "scale=3; ${VSZ_SUM}/1024" | bc`
array=(${VSZ_SUM})
IFS=${old_ifs}
VSZ_SUM=${array[0]}
str=$(echo ${array[1]} | sed "s/[^\n]/&\t/g")
array=(${str})
length=${#array[@]}
length=$((${length}-1))
for (( i=${length}; i >= 0; i-- )); do
if [[ ${array[$i]} = 0 ]]; then
unset array[$i]
else
break
fi
done
VSZ_SUM="${VSZ_SUM}.${array[@]}"
RSS_SUM=`echo "scale=3; ${RSS_SUM}/1024" | bc`
IFS="."
array=(${RSS_SUM})
IFS=${old_ifs}
RSS_SUM=${array[0]}
str=$(echo ${array[1]} | sed "s/[^\n]/&\t/g")
array=(${str})
length=${#array[@]}
length=$((${length}-1))
for (( i=${length}; i >= 0; i-- )); do
if [[ ${array[$i]} = 0 ]]; then
unset array[$i]
else
break
fi
done
RSS_SUM="${RSS_SUM}.${array[@]}"
IFS=${old_ifs}
echo "VSZ_SUM:${VSZ_SUM}M,RSS_SUM:$(echo "${RSS_SUM}" | sed 's/ //g')M"
}
########################################################
#
#
########################################################
function solution_2() {
awk '{
if(NR==1) {
vsz=0;
rss=0;
} else {
vsz += $5;
rss += $6;
}
} END {
print "MEM TOTAL";
print "VSZ_SUM:"vsz/1024"M,RSS_SUM:"rss/1024"M";
}' nowcoder.txt
}
#solution_1
solution_2