首页 > 试题广场 >

ps分析-统计VSZ,RSS各自总和

[编程题]ps分析-统计VSZ,RSS各自总和
  • 热度指数:8621 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
假设命令运行的结果我们存储在nowcoder.txt里,格式如下:
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1  37344  4604 ?        Ss    2020   2:13 /sbin/init
root       231  0.0  1.5 166576 62740 ?        Ss    2020  15:15 /lib/systemd/systemd-journald
root       237  0.0  0.0      0     0 ?        S<    2020   2:06 [kworker/0:1H]
root       259  0.0  0.0  45004  3416 ?        Ss    2020   0:25 /lib/systemd/systemd-udevd
root       476  0.0  0.0      0     0 ?        S<    2020   0:00 [edac-poller]
root       588  0.0  0.0 276244  2072 ?        Ssl   2020   9:49 /usr/lib/accountsservice/accounts-daemon
message+   592  0.0  0.0  42904  3032 ?        Ss    2020   0:01 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
root       636  0.0  0.0  65532  3200 ?        Ss    2020   1:51 /usr/sbin/sshd -D
daemon     637  0.0  0.0  26044  2076 ?        Ss    2020   0:00 /usr/sbin/atd -f
root       639  0.0  0.0  29476  2696 ?        Ss    2020   3:29 /usr/sbin/cron -f
root       643  0.0  0.0  20748  1992 ?        Ss    2020   0:26 /lib/systemd/systemd-logind
syslog     645  0.0  0.0 260636  3024 ?        Ssl   2020   3:17 /usr/sbin/rsyslogd -n
root       686  0.0  0.0 773124  2836 ?        Ssl   2020  26:45 /usr/sbin/nscd
root       690  0.0  0.0  19472   252 ?        Ss    2020  14:39 /usr/sbin/irqbalance --pid=/var/run/irqbalance.pid
ntp        692  0.0  0.0  98204   776 ?        Ss    2020  25:18 /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 108:114
uuidd      767  0.0  0.0  28624   192 ?        Ss    2020   0:00 /usr/sbin/uuidd --socket-activation
root       793  0.0  0.0 128812  3148 ?        Ss    2020   0:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
www-data   794  0.0  0.2 133376  9120 ?        S     2020 630:57 nginx: worker process
www-data   795  0.0  0.2 133208  8968 ?        S     2020 633:02 nginx: worker process
www-data   796  0.0  0.2 133216  9120 ?        S     2020 634:24 nginx: worker process
www-data   797  0.0  0.2 133228  9148 ?        S     2020 632:56 nginx: worker process
web        955  0.0  0.0  36856  2112 ?        Ss    2020   0:00 /lib/systemd/systemd --user
web        956  0.0  0.0  67456  1684 ?        S     2020   0:00 (sd-pam)
root      1354  0.0  0.0   8172   440 tty1     Ss+   2020   0:00 /sbin/agetty --noclear tty1 linux
root      1355  0.0  0.0   7988   344 ttyS0    Ss+   2020   0:00 /sbin/agetty --keep-baud 115200 38400 9600 ttyS0 vt220
root      2513  0.0  0.0      0     0 ?        S    13:07   0:00 [kworker/u4:1]
root      2587  0.0  0.0      0     0 ?        S    13:13   0:00 [kworker/u4:2]
root      2642  0.0  0.0      0     0 ?        S    13:17   0:00 [kworker/1:0]
root      2679  0.0  0.0      0     0 ?        S    13:19   0:00 [kworker/u4:0]
root      2735  0.0  0.1 102256  7252 ?        Ss   13:24   0:00 sshd: web [priv]
web       2752  0.0  0.0 102256  3452 ?        R    13:24   0:00 sshd: web@pts/0
web       2753  0.5  0.1  14716  4708 pts/0    Ss   13:24   0:00 -bash
web       2767  0.0  0.0  29596  1456 pts/0    R+   13:24   0:00 ps aux
root     10634  0.0  0.0      0     0 ?        S    Nov16   0:00 [kworker/0:0]
root     16585  0.0  0.0      0     0 ?        S<    2020   0:00 [bioset]
root     19526  0.0  0.0      0     0 ?        S    Nov16   0:00 [kworker/1:1]
root     28460  0.0  0.0      0     0 ?        S    Nov15   0:03 [kworker/0:2]
root     30685  0.0  0.0  36644  2760 ?        Ss    2020   0:00 /lib/systemd/systemd --user
root     30692  0.0  0.0  67224  1664 ?        S     2020   0:00 (sd-pam)
root     32689  0.0  0.0  47740  2100 ?        Ss    2020   0:00 /usr/local/ilogtail/ilogtail
root     32691  0.2  0.5 256144 23708 ?        Sl    2020 1151:31 /usr/local/ilogtail/ilogtail
现在需要你统计VSZ,RSS各自的总和(以M兆为统计),输出格式如下
MEM TOTAL
VSZ_SUM:3250.8M,RSS_SUM:179.777M
awk 'BEGIN{sum_vsz=0;sum_rss=0;print "MEM TOTAL"}NR>1{sum_vsz+=$5;sum_rss+=$6}END{printf("VSZ_SUM:%.1fM,RSS_SUM:%.3fM",sum_vsz/1024,sum_rss/1024)}' nowcoder.txt
发表于 2024-06-04 16:18:43 回复(0)

注意精度以及单位即可,NR>1也可以不加,因为awk会在进行数值运算时将字符串转成0

awk 'NR > 1{
    vsz_sum+=$5
    rss_sum+=$6
}
END{
    print("MEM TOTAL")
    printf("VSZ_SUM:%.1fM,RSS_SUM:%.3fM", vsz_sum / 2^10, rss_sum / 2^10)
}' nowcoder.txt
发表于 2022-08-28 00:53:24 回复(0)
#!/bin/bash
echo "MEM TOTAL"
sed 1d nowcoder.txt |
awk '{
    vsz+=$5
    rss+=$6
}END{
    printf("VSZ_SUM:%.1fM,RSS_SUM:%.3fM",vsz/1024,rss/1024)
}'

发表于 2022-08-12 14:18:00 回复(0)
awk '{VSZ_SUM+=$5;RSS_SUM+=$6}END{print "MEM TOTAL";print "VSZ_SUM:"VSZ_SUM/1024"M,RSS_SUM:"RSS_SUM/1024"M"}' nowcoder.txt
发表于 2022-07-16 16:52:53 回复(0)
sum=0
for line in `awk '{print $5}' nowcoder.txt`
do
    ((sum+=$line))
done
vsz=`echo "scale=1;$sum/1024"|bc`

sum2=0
for line in `awk '{print $6}' nowcoder.txt`
do
    ((sum2+=$line))
done
rss=`echo "scale=3;$sum2/1024"|bc`

echo 'MEM TOTAL'
echo "VSZ_SUM:${vsz}M,RSS_SUM:${rss}M"
发表于 2022-06-16 23:42:32 回复(0)
awk -F '[ ]+' 'BEGIN{
    vsz=0;
    rss=0;
    print "MEM TOTAL";
}{
    vsz+=$5;
    rss+=$6;
}END{
    printf("VSZ_SUM:%.1fM,RSS_SUM:%.3fM",vsz/1024f,rss/1024f);
}'
发表于 2022-06-04 22:58:23 回复(1)
#! /bin/bash
echo "MEM TOTAL"
awk '{if(NR != 1){arr["VSZ"]+=$5;arr["RSS"]+=$6;}}END{print "VSZ_SUM:"arr["VSZ"]/1024"M,RSS_SUM:"arr["RSS"]/1024"M"}' nowcoder.txt
发表于 2022-06-03 12:17:22 回复(0)
awk -F " " '{VSZ_SUM+=$5;RSS_SUM+=$6}END{
print "MEM TOTAL\nVSZ_SUM:" VSZ_SUM/1024 "M,RSS_SUM:" RSS_SUM/1024 "M"
}'
发表于 2022-05-11 19:04:16 回复(0)
cat nowcoder.txt | awk '
BEGIN{s1=0;s2=0}
{s1+=$5;s2+=$6}
END{print "MEM TOTAL";printf("VSZ_SUM:%.1fM,RSS_SUM:%.3fM",s1/1024,s2/1024);}'

发表于 2022-04-23 21:44:55 回复(0)
#! /bin/bash
awk '{ 
VSZ_SUM=VSZ_SUM+$5
RSS_SUM=RSS_SUM+$6
}END{
printf("MEM TOTAL\n")
printf("VSZ_SUM:%.1fM,RSS_SUM:%.3fM",VSZ_SUM/1024,RSS_SUM/1024)
}'
发表于 2022-04-09 19:28:27 回复(0)
#!/bin/bash

num1=`awk '{sum+=$5}END{print sum/1024"M"}' nowcoder.txt`
num2=`awk '{sum+=$6}END{print sum/1024"M"}' nowcoder.txt`

echo "MEM TOTAL"
echo "VSZ_SUM:$num1,RSS_SUM:$num2"
发表于 2022-03-02 21:52:00 回复(0)
awk 'BEGIN{print "MEM TOTAL"}{a+=$5;b+=$6}END{c=a/1024;d=b/1024;printf "VSZ_SUM:%.1fM,RSS_SUM:%.3fM",c,d}'
发表于 2022-03-01 12:03:35 回复(0)
cat nowcoder.txt | awk 'BEGIN{vsz_sum=0;rss_sum=0}{vsz_sum+=$5;rss_sum+=$6}END{print "MEM TOTAL\n" "VSZ_SUM:"(vsz_sum/1024)"M,RSS_SUM:"(rss_sum/1024)"M"}'
发表于 2022-02-05 21:08:46 回复(0)
awk '{
    vsz+=$5
    rss+=$6
} END {
    printf("MEM TOTAL\n")
    printf("VSZ_SUM:%0.1fM,RSS_SUM:%0.3fM",vsz/1024,rss/1024)
}'
发表于 2022-01-29 15:08:26 回复(0)
awk '{a=a+$5;b=b+$6}END{print "MEM TOTAL";print "VSZ_SUM:"a/1024"M,RSS_SUM:"b/1024"M"}' nowcoder.txt 

发表于 2021-12-09 12:01:51 回复(1)
vsz=`cat nowcoder.txt |awk '{sum +=$5};END {print sum/1024}'`
rss=`cat nowcoder.txt |awk '{sum +=$6};END {print sum/1024}'`
echo 'MEM TOTAL'
echo 'VSZ_SUM:'$vsz'M,RSS_SUM:'$rss'M'
发表于 2021-11-25 13:16:34 回复(0)
#一步一步来,没有任何花哨的东西。
VSRSUM=0
RSSSUM=0
VSR=$(cat nowcoder.txt | grep -v "VSR" | awk '{print $5}')
RSS=$(cat nowcoder.txt | grep -v "RSS" | awk '{print $6}')
for v in $VSR
do
VSRSUM=$[ $VSRSUM + $v ]
done

for r in $RSS
do
RSSSUM=$[ $RSSSUM + $r ]
done

vm1=`echo "scale=1;$VSRSUM/1024" | bc`
vr1=`echo "scale=3;$RSSSUM/1024" | bc`
echo "MEM TOTAL"
echo "VSZ_SUM:$vm1"M",RSS_SUM:$vr1"M""
发表于 2021-11-20 22:24:44 回复(0)