Shell脚本利器之——awk

AWK介绍

awk是类UNIX系统下的一种编程语言,字面含义是三个作者的姓名首字母,即:Alfred Aho、Brian Kernighan、PeterWeinberger。

awk用于处理文本和数据,可处理的数据来源,可以是标准输入、一个文件、多个文件或其他命令的输出。支持用户自定义函数和正则表达式。可在命令行中使用,但多用于脚本中。

awk语句由模式和动作两部分组成,模式部分决定动作部分何时触发,以及触发什么事件;动作部分是对数据的具体操作。

awk对文本和数据的处理方式类似于grep,对输入内容进行逐行扫描,按照给定的模式进行匹配。对匹配到的内容进行指定动作。如果没有给定模式,则处理所有行;如果没有给出指定动作,则把匹配的内容显示在屏幕上(标准输出)。

模式部分可以使用任何条件语句、复合语句或正则表达式。
默认换行符为\n,当指定换行符时,以指定换行符区分行。一行文本称为一条记录。
默认分隔符为空格,分割出的一段称为一个字段。

命令格式:

  1. awk ‘匹配模式’ filename
    过滤出含有匹配的内容的行。匹配字符串,格式为:/字符串/;按条件匹配时,直接使用条件,如:$3>5。
    例:
]$ awk '/^root/' /etc/passwd	
#匹配以root字符开头的记录,并输出。结果如下:
  root:x:0:0:root:/root:/bin/bash
  operator:x:11:0:operator:/root:/sbin/nologin
  1. awk ‘{指定的动作}’ filename
    对指定的文件内容,执行指定的动作。
    例:
]$ awk -F: '{print NR $1,$NF}' /etc/passwd	
#以冒号为分隔符,打印输出行号、第一个字段和最后一个字段。结果如下:
	1root /bin/bash
	2bin /sbin/nologin
	3daemon /sbin/nologin
	4adm /sbin/nologin
	……
  1. awk ‘匹配模式{指定的动作}’ filename
    过滤文件内容,对匹配的内容,执行指定的动作
    例:
]$ awk -F: '/root/{print NR $1,$NF}' /etc/passwd	
#通上例,增加匹配条件:包含root字符的行。结果如下:
	1root /bin/bash
	10operator /sbin/nologin

参数说明:

  • -F 定义分割符号;
  • -v 定义变量并赋值;
  • GEGINI{} 是模式部分的一个函数,即开始处理数据前要运行的语句;
  • END{} 是模式部分的一个函数,即结束处理数据后要运行的语句;

变量:

  • $n 表示当前处理的记录中,以指定的分隔符分割后的第n个字段。
    $1:第1个字段;$2:第2个字段;以此类推;$0,代表整条记录;
  • NF 代表当前记录中的字段数目。
  • $NF 表示最后一列;
  • $(NF-1) 表示倒数第二列;
  • FNR/NR 表示行号;
  • RS 换行符 指定换行符;
  • FS=‘分隔符’ 指定分隔符。-F参数的长格式。默认分隔符为空格。

格式化输出:

]$ head -5 /etc/passwd|awk -F: 'BEGIN{print"user\thomedir\tshell"RS"*******************"};{print$1"\t"$(NF-1)"\t"$NF};END{print"**********end**********"}'	
 #格式化输出passwd文件的前5行。结果如下:
	user    homedir shell
	*******************
	root    /root   /bin/bash
	bin     /bin    /sbin/nologin
	daemon  /sbin   /sbin/nologin
	adm     /var/adm        /sbin/nologin
	lp      /var/spool/lpd  /sbin/nologin
	**********end**********
]$ df -P|grep '/'|awk '$6=="/" {print $4}'
 #输出根目录可用空间值。结果如下:/>
8560648
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值