【Shell案例】【取指定列的方式$5 p[6],双括号运算、awk、管道运算】8、统计所有进程占用内存大小的和

假设 nowcoder.txt 内容如下:
root 2 0.0 0.0 0 0 ? S 9月25 0:00 [kthreadd]
root 4 0.0 0.0 0 0 ? I< 9月25 0:00 [kworker/0:0H]
web 1638 1.8 1.8 6311352 612400 ? Sl 10月16 21:52 test
web 1639 2.0 1.8 6311352 612401 ? Sl 10月16 21:52 test
tangmiao-pc 5336 0.0 1.4 9100240 238544 ?? S 3:09下午 0:31.70 /Applications

以上内容是通过ps aux | grep -v 'RSS TTY' 命令输出到nowcoder.txt文件下面的
请你写一个脚本计算一下所有进程占用内存大小的和:

重点:使用双小括号实现运算和条件判断

方法1:for循环+累加

思路:

取某一列的值,并通过变量的方式累加

确定哪一列是内存占用大小:USER PID %CPU %MEM

确定如何取某一个内容 $3

如何转为整形

定义累加变量let sum=0

#!/bin/bash sum=0 # 每一行寻找第几列的值USER    PID    %CPU    %MEM,即第i行的第3列 # 利用awk直接得到第6个元素的内容 for i in `awk '{print $6}' nowcoder.txt`  # 并不是真的打印,而是把值传递给i do     ((sum+=$i)) done echo $sum

方法2:while循环

#!/bin/bash sum=0 while read p do     arr=($p)     ((sum+=arr[5])) done < nowcoder.txt echo $sum

方法3:awk实现结果计算

#!/bin/bash awk 'BEGIN{sum=0}{sum+=$6}END{print sum}' nowcoder.txt

或直接省略BEGIN初始化操作

#!/bin/bash awk '{sum+=$6}END{print sum}' nowcoder.txt

方法4:while循环和awk结合

#!/bin/bash sum=0 while read p do      # 管道与awk结合     ((sum+=$(echo $p|awk '{print $6}'))) done < nowcoder.txt echo $sum