分析文件
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")}'



京公网安备 11010502036488号