获取linux系统中mem占用率 -- awk使用详解

来源:互联网 发布:2083欧洲独立宣言 知乎 编辑:程序博客网 时间:2024/06/06 02:32

获取linux系统中mem占用率 – awk使用详解

本文通过实现获取系统的mem占用率为切入点,主要对awk命令的一些常用用法进行分析。

awk命令

awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入(stdin)、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。

代码块

#!/bin/sh     MemTotal=$(cat /proc/meminfo |grep MemTotal|awk '{ print $2}')    MemFree=$(cat /proc/meminfo |grep MemFree|awk '{ print $2}')    echo "MemFree/MemTotal=$((MemFree*100/$MemTotal))"    echo "this is end,byebye~"

执行结果

执行结果

结果分析

其实该段代码主要就是
cat /proc/meminfo |grep MemTotal|awk '{ print $2}'
其中,
cat /proc/meminfo |grep MemTotal的执行结果是MemTotal: 4131724 kB
而awk的功能也很明确,取出第二个字符串4131724,也就是21很显然值为MemTotal:,但是$0的值估计不清楚具体是什么。

这里写图片描述
另外,可以依照上面的命令获取其他的数据,比如/proc/stat里面的数据来计算cpu的使用率,也可以结合fconfig得到本机IP。

#!/bin/sh     echo "hello,i am just a test"    num=$(ifconfig eth0 | grep "inet " | awk '{ print $2}')    echo $num    echo "this is end,byebye~"

awk命令分析

awk脚本的基本结构

awk 'BEGIN{ print "start" } pattern{ commands } END{ print "end" }' file

BEGIN语句块、能够使用模式匹配的通用语句块、END语句块3部分组成,这三个部分是可选的。任意一个部分都可以不出现在脚本中,脚本通常是被单引号或双引号中,例如: awk ‘BEGIN{ i=0 } { i++ } END{ print i }’ filename 和awk “BEGIN{ i=0 } { i++ } END{ print i }” filename

  • 第一步:执行BEGIN{ commands }语句块中的语句;
  • 第二步:从文件或标准输入(stdin)读取一行,然后执行pattern{ commands }语句块,它逐行扫描文件,从第一行到最后一行重复这个过程,直到文件全部被读取完毕。
  • 第三步:当读至输入流末尾时,执行END{ commands }语句块。
echo -e "A B C D E F" | awk 'BEGIN{ print "Start" } { print } END{ print "End" }'StartA B C D E FEnd

这里指出,awk既可以处理文件(file)中的命令,可以接收的是其他命令的的数据(管道)。

awk内置变量(预定义变量)

说明:[A][N][P][G]表示第一个支持变量的工具,[A]=awk、[N]=nawk、[P]=POSIXawk、[G]=gawk

$n 当前记录的第n个字段,比如n为1表示第一个字段,n为2表示第二个字段。

  • [N] ARGC 命令行参数的数目。
  • [N] ARGV 包含命令行参数的数组。
  • [P] ENVIRON 环境变量关联数组。
  • [G] FIELDWIDTHS 字段宽度列表(用空格键分隔)。
  • [A] FILENAME 当前输入文件的名。
  • [A] FS 字段分隔符(默认是任何空格)。
  • [A] NF 表示字段数,在执行过程中对应于当前的字段数。
  • [A] NR 表示记录数,在执行过程中对应于当前的行号。
  • [A] OFS 输出字段分隔符(默认值是一个空格)。
  • [A] RS 记录分隔符(默认是一个换行符)。
  • [N] RSTART 由match函数所匹配的字符串的第一个位置。
  • [N] SUBSEP 数组下标分隔符(默认值是34)。
原创粉丝点击