首页 > 试题广场 >

统计所有进程占用内存百分比的和

[编程题]统计所有进程占用内存百分比的和
  • 热度指数:55537 时间限制: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.4  77744  8332 ?        Ss    2021   1:15 /sbin/init noibrs splash
root         2  0.0  0.0      0     0 ?        S     2021   0:00 [kthreadd]
root         4  0.0  0.0      0     0 ?        I<    2021   0:00 [kworker/0:0H]
daemon     486  0.0  0.1  28340  2372 ?        Ss    2021   0:00 /usr/sbin/atd -f
root       586  0.0  0.3  72308  6244 ?        Ss    2021   0:01 /usr/sbin/sshd -D
root     12847  0.0  0.0   4528    68 ?        S<   Jan03   0:13 /usr/sbin/atopacctd
root     16306  1.7  1.2 151964 26132 ?        S<sl Apr15 512:03 /usr/local/aegis/aegis_client/aegis_11_25/AliYunDun
root     24143  0.0  0.4  25608  8652 ?        S<Ls 00:00   0:03 /usr/bin/atop -R -w /var/log/atop/atop_20220505 600
root     24901  0.0  0.3 107792  7008 ?        Ss   15:37   0:00 sshd: root@pts/0
root     24903  0.0  0.3  76532  7580 ?        Ss   15:37   0:00 /lib/systemd/systemd --user
root     24904  0.0  0.1 111520  2392 ?        S    15:37   0:00 (sd-pam)
以上内容是通过ps aux命令输出到nowcoder.txt文件中的,请你写一个脚本计算一下所有进程占用内存大小的和。
示例1

输入

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.4  77744  8332 ?        Ss    2021   1:15 /sbin/init noibrs splash
root         2  0.0  0.0      0     0 ?        S     2021   0:00 [kthreadd]
root         4  0.0  0.0      0     0 ?        I<    2021   0:00 [kworker/0:0H]
daemon     486  0.0  0.1  28340  2372 ?        Ss    2021   0:00 /usr/sbin/atd -f
root       586  0.0  0.3  72308  6244 ?        Ss    2021   0:01 /usr/sbin/sshd -D
root     12847  0.0  0.0   4528    68 ?        S<   Jan03   0:13 /usr/sbin/atopacctd
root     16306  1.7  1.2 151964 26132 ?        S<sl Apr15 512:03 /usr/local/aegis/aegis_client/aegis_11_25/AliYunDun
root     24143  0.0  0.4  25608  8652 ?        S<Ls 00:00   0:03 /usr/bin/atop -R -w /var/log/atop/atop_20220505 600
root     24901  0.0  0.3 107792  7008 ?        Ss   15:37   0:00 sshd: root@pts/0
root     24903  0.0  0.3  76532  7580 ?        Ss   15:37   0:00 /lib/systemd/systemd --user
root     24904  0.0  0.1 111520  2392 ?        S    15:37   0:00 (sd-pam)

输出

3.1
新版题解:awk '{a+=$4}END{print a}'
发表于 2025-07-04 15:35:43 回复(0)
#!/bin/bash

awk '{sum+=$4}END{print sum}' nowcoder.txt

发表于 2025-06-09 15:39:28 回复(0)
cat nowcoder.txt|grep -v "^USER" |awk '{ sum += $4} END {print sum}'
发表于 2025-02-11 18:59:12 回复(0)
awk 'BEGIN{SUM=0}{SUM+=$4}{print SUM}END{print SUM}' nowcoder.txt | awk '{line=$0} END{print line}'
发表于 2024-08-13 22:43:22 回复(0)
awk 'NR>1{sum+=$4} END {print sum}'
发表于 2024-06-30 18:17:26 回复(0)
#!/bin/bash

count=$(wc -l <nowcoder.txt)  #1
mem=0
for i in $(seq 2 $count); do  #2
	mem_current=$(awk -F ' ' "NR==$i{print$4}" nowcoder.txt | awk '{print$4}') #3
	mem=$(echo "$mem + $mem_current" | bc)  #4
done
echo $mem

# 1.计算nowcoder.txt文件行数并赋值给你变量 count=$(wc -l <nowcoder.txt) 获取文件单词数量  wc -c
# 2.for循环的格式 1. for i in 条件   2. C风格的for循环: for((i=2; i<=$count; i++))
# 2.表示数字范围的写法 seq 1 10表示1..10。同样{1..10} ye表示1..10
# 3.第一个awk打印部分用了双引号是因为涉及到$i变量引用,无法直接获得第四列,所以通过管道命令又用了一次awk
# 4.内存计算涉及到小数运算要使用 | bc

发表于 2024-02-21 17:35:59 回复(0)
题目改了,用第四列才对
#!/bin/bash
sum=0
for i in `awk '{print $4}' nowcoder.txt | sed  1d`
do
    sum=$(echo "$i+$sum" | bc)
done
echo $sum
发表于 2023-10-07 20:39:31 回复(0)
# 方法1: 使用awk进行运算比较好, 因为shell中本身是没有浮点运算的,只能借助awk或者bc工具
# 先把初始化写好 BEGIN{sum=0.0} # 初始化变量
# 再把最终的输出写好 END{print sum} # 最后打印变量
# 然后过滤出符合条件的行, 因为第一行不能用来计算: if (NR>1) {#这里面处理} ---简化后---> NR>1
# 然后将第4列的数据累加起来也就是:{sum+=$4}
# 写全一点就是:
awk 'BEGIN{sum=0.0} {if(NR>1){sum+=$4}} END{print sum}' nowcoder.txt
# 简化后是:
awk 'BEGIN{sum=0.0} NR>1 {sum+=$4} END{print sum}' nowcoder.txt

# 2023年3月13日16:04:08

发表于 2023-03-13 16:06:04 回复(0)
awk 'BEGIN {sum=0} /[0-9]/ {sum+=$4} END{print sum}' nowcoder.txt


发表于 2023-01-06 18:21:11 回复(0)
#!/bin/bash

s=$(cat nowcoder.txt | awk '{print $4}' | grep -v 'MEM')
sum=0
for i in $s; do
    sum=$(echo "${sum} + ${i}" | bc)
done
echo $sum
发表于 2023-01-03 11:08:01 回复(0)
awk '{res += $6} END{print res}' nowcoder.txt
发表于 2022-08-27 17:38:21 回复(0)
#!/bin/bash
awk '{print $6}' nowcoder.txt|tr "\n" "+"|sed 's/+$//'|bc

大神帮忙看看这个又错在哪了呢,我自己的机器上输出的也是10没问题啊

发表于 2022-07-17 07:54:27 回复(1)
为什么是$6,不是$4啊,不是第4列吗
发表于 2022-06-07 15:32:07 回复(0)
awk '{num=num+$6}END{print num}' nowcoder.txt

发表于 2022-05-18 15:52:18 回复(0)
awk '{sum+=$6}END {print sum}'

发表于 2022-05-09 12:09:25 回复(0)
awk '{sum = sum + $6} END{print sum}' nowcoder.txt
发表于 2022-05-05 17:29:16 回复(0)
笑出声。

超过 0.05% 用 Bash 提交的代码
发表于 2022-04-09 16:40:57 回复(0)
我来个原始滴
cat nowcoder.txt|tr -s " "|cut -d " " -f6|tr -s "\n" "+" > c.txt
echo 0 >> c.txt
cat c.txt|bc
发表于 2022-04-01 04:30:16 回复(0)
cat nowcoder.txt |awk 'BEGIN{sum=0}{sum+=$6} END{print sum}'
发表于 2022-03-17 16:06:05 回复(0)