首页 > 试题广场 >

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

[编程题]ps分析-统计VSZ,RSS各自总和
  • 热度指数:8618 时间限制: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
awk '{
    v += $5
    r += $6
} END {
    printf("MEM TOTAL\nVSZ_SUM:%0.1fM,RSS_SUM:%0.3fM", v/1024, r/1024)
}'


发表于 2021-11-23 14:05:08 回复(4)
vsz_sum=$(cat "$1" | gawk '{print $5}' | gawk 'BEGIN{ vsz_sum=0} { if( NR != 1 ) vsz_sum += $1} END {print vsz_sum / 1024}')
rss_sum=$(cat "$1" | gawk '{print $6}' | gawk 'BEGIN{ rss_sum=0} { if( NR != 1 ) rss_sum += $1} END {print rss_sum / 1024}')
echo "MEM TOTAL"
echo "VSZ_SUM:$vsz_sum""M,RSS_SUM:$rss_sum""M"
发表于 2024-09-12 14:57:22 回复(0)
VSZ=`cat nowcoder.txt | awk '{print $5}' | grep '[^VSZ]'`
RSS=`cat nowcoder.txt | awk '{print $6}' | grep '[^RSS]'`
VSZ_SUM=0
RSS_SUM=0
for i in $VSZ
do
    VSZ_SUM=$((VSZ_SUM + $i))
done
for i in $RSS
do
    RSS_SUM=$((RSS_SUM + $i))
done

VSZ_SUMM=`echo "scale=1;$VSZ_SUM / 1024" | bc -l`
RSS_SUMM=`echo "scale=3;$RSS_SUM / 1024" | bc -l`

echo "MEM"" ""TOTAL"
echo "VSZ_SUM:"$VSZ_SUMM"M"",""RSS_SUM:"$RSS_SUMM"M"
发表于 2024-07-04 16:31:38 回复(0)
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)
cat nowcoder.txt | awk 'NR>1{
    a+=$5
    b+=$6
}END{
    print "MEM TOTAL"
    print "VSZ_SUM:"a/1024"M"",RSS_SUM:"b/1024"M"
}'

编辑于 2024-01-27 15:03:19 回复(0)
#!/bin/bash

awk '{
    vsz_sum+=$5
    rss_sum+=$6
} END {
    printf("MEM TOTAL\nVSZ_SUM:%0.1fM,RSS_SUM:%0.3fM", vsz_sum/1024, rss_sum/1024)
}'

发表于 2023-10-13 10:37:01 回复(0)
awk '{
    v += $5
    r += $6
} END {
    printf("MEM TOTAL\nVSZ_SUM:%0.1fM,RSS_SUM:%0.3fM", v/1024, r/1024)
}'
发表于 2023-08-25 14:39:44 回复(0)
awk 'NR>1{print}' nowcoder.txt|awk '{vsz+=$5;rss+=$6}END{printf("MEM TOTAL\n");printf("VSZ_SUM:" vsz/1024 "M,RSS_SUM:" rss/1024 "M")}'
发表于 2023-08-11 16:49:45 回复(0)
awk -F " " '
    {
     if(NR!=1){
        vsum+=$5
        rsum+=$6
     }
    };
    END{
        vsum=vsum/1024
        rsum=rsum/1024
        print "MEM TOTAL"
        print "VSZ_SUM:"vsum"M,RSS_SUM:"rsum"M"
     }
     ' nowcoder.txt

发表于 2023-01-17 16:34:37 回复(0)
vsz=0
rss=0
for line in `sed '1d' nowcoder.txt | awk '{print $5}'`; do
    vsz=$(($vsz+$line))
done
for line in `sed '1d' nowcoder.txt | awk '{print $6}'`; do
    rss=$(($rss+$line))
done
vsz=`echo "scale=1; $vsz/1024" | bc`
rss=`echo "scale=3; $rss/1024" | bc`
echo "MEM TOTAL"
echo -n "VSZ_SUM:${vsz}M,"
echo -n "RSS_SUM:${rss}M"

发表于 2023-01-07 20:58:22 回复(0)
awk '{if($1!="USER")res=(res+$5/1024);res2=(res2+$6/1024)}END{print "MEM TOTAL\n""VSZ_SUM:"res"M" ",RSS_SUM:"res2"M"}'
发表于 2022-10-30 10:30:19 回复(0)
awk '{vsz+=$5;rss+=$6}END{printf("MEM TOTAL\nVSZ_SUM:%.1fM,RSS_SUM:%.3fM",vsz/1024,rss/1024)}' nowcoder.txt
发表于 2022-09-26 14:26:34 回复(0)
awk '{vsz += $5; rss += $6;}
  END{print "MEM TOTAL"; print "VSZ_SUM:" vsz / 1024 "M,RSS_SUM:" rss / 1024 "M"}' nowcoder.txt
发表于 2022-09-20 23:41:09 回复(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 '{v+=$5;r+=$6}END{print "MEM TOTAL\nVSZ_SUM:" v/1024 "M,RSS_SUM:" r/1024 "M"}' nowcoder.txt

发表于 2022-06-12 09:40:29 回复(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)