分析文件

VSZ在第5列,RSS在第6列
它们单位都是KB,转换成M需要除以1024

知识点补充

awk的知识点
1.BEGIN只执行一次并且执行在主体代码块之前。
2.END只执行一次并且执行在主体代码块之后。
3.BEGIN可以抛开文件单独执行,结果类似于echo而END不可以。
4.BEGIN中没有文件的读取变量而END是有的。但END中的$0是awk处理到最后的文本样

执行命令

cat nowcoder.txt|grep -v "%CPU" | awk 'BEGIN{print("MEM TOTAL")}{vsz+=$5;rss+=$6}END{print("VSZ_SUM:" vsz/1024 "M,RSS_SUM:" rss/1024 "M")}'

思路拆解:

首先过滤掉txt文件中首行字符串​

cat nowcoder.txt|grep -v "%CPU"

再使用awk 'BEGIN{}{主体代码}END{}' 语法解题

awk 'BEGIN{print("MEM TOTAL")}  ## 开始扫描输入之前执行。打印 MEM TOTAL,注意打印完会自带\n换行,不用再加\n
     {vsz+=$5;rss+=$6} ## BEGIN{}和END{}之间定义求和变量,注意这是;分号! vsz+=$5等同于vsz=vsz+$5
     END{print("VSZ_SUM:" vsz/1024 "M,RSS_SUM:" rss/1024 "M")}' ## END之后列出的操作将在扫描完全部的输入之后执行。打印结果,注意这里字段之间的空格对print打印无影响," "之间的为题目要求需要打印的字符串

其他方法

# 在END{}打印结果,注意这里MEM TOTAL后面要加\n
cat nowcoder.txt|grep -v "%CPU" | awk '{vsz+=$5;rss+=$6}END{print("MEM TOTAL\n" "VSZ_SUM:" vsz/1024 "M,RSS_SUM:" rss/1024 "M")}'