linux 命令之awk

    科技2023-10-01  85

    一.作用

    awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

    使用场景:

    通常用在Shell脚本中,获取指定的数据,单独使用时,可对文本数据做统计

    二.语法

    awk [-F|-f|-v] ‘BEGIN{} //{command1; command2} END{}file

    [-F|-f|-v] 大参数,-F指定分隔符,-f调用脚本,-v定义变量 var=value ’ ’ 引用代码块 BEGIN 初始化代码块,在对每一行进行处理之前,初始化代码,主要是引用全局变量,设置FS分隔符 // 匹配代码块,可以是字符串或正则表达式 {} 命令代码块,包含一条或多条命令 ; 多条命令使用分号分隔 END 结尾代码块,在对每一行进行处理之后再执行的代码块,主要是进行最终计算或输出结尾摘要信息

    AWK 包含两种特殊的模式:BEGIN 和 END。

    BEGIN 模式指定了处理文本之前需要执行的操作:

    END 模式指定了处理完所有行之后所需要执行的操作 特殊要点:

    $0 表示整个当前行 $1 每行第一个字段 NF 字段数量变量 NR 每行的记录号,多文件记录递增 FNR 与NR类似,不过多文件记录不递增,每个文件都从1开始 \t 制表符 \n 换行符 FS BEGIN时定义分隔符 RS 输入的记录分隔符, 默认为换行符(即文本是按一行一行输入) ~ 匹配,与==相比不是精确比较 !~ 不匹配,不精确比较 == 等于,必须全部相等,精确比较 != 不等于,精确比较 &&  逻辑与 || 逻辑或 匹配时表示1个或1个以上 /[0-9][0-9]+/ 两个或两个以上数字 /[0-9][0-9]*/ 一个或一个以上数字 FILENAME 文件名 OFS 输出字段分隔符, 默认也是空格,可以改为制表符等 ORS 输出的记录分隔符,默认为换行符,即处理结果也是一行一行输出到屏幕 -F'[:#/]' 定义三个分隔符

    三.实例

    1.使用正则,字符串匹配

    awk '/白/ ' test.txt

    2.忽略大小写

    awk 'BEGIN{IGNORECASE=1} /this/' test.txt

    3.获取网卡ip

    ifconfig ens33 | grep inet | awk -F " " '{print $2}' | awk 'NR==1'

    ifconfig ens33 | awk 'NR==2' | awk -F ' ' '{print $2}'

    4.获取网关地址

    ifconfig ens33 | awk 'NR==2' | awk -F ' ' '{print $6}'

    5.获取磁盘空间已经使用量

    df -h /home | awk 'NR==2' | awk -F ' ' '{print $5}'

    6.查看内存总数

    cat /proc/meminfo | awk 'NR ==1' | awk '{ gsub (" ","",$0); print}' | awk -F ":" '{print $2}'

    Processed: 0.008, SQL: 8