AWK介绍
awk是类UNIX系统下的一种编程语言,字面含义是三个作者的姓名首字母,即:Alfred Aho、Brian Kernighan、PeterWeinberger。
awk用于处理文本和数据,可处理的数据来源,可以是标准输入、一个文件、多个文件或其他命令的输出。支持用户自定义函数和正则表达式。可在命令行中使用,但多用于脚本中。
awk语句由模式和动作两部分组成,模式部分决定动作部分何时触发,以及触发什么事件;动作部分是对数据的具体操作。
awk对文本和数据的处理方式类似于grep,对输入内容进行逐行扫描,按照给定的模式进行匹配。对匹配到的内容进行指定动作。如果没有给定模式,则处理所有行;如果没有给出指定动作,则把匹配的内容显示在屏幕上(标准输出)。
模式部分可以使用任何条件语句、复合语句或正则表达式。
默认换行符为\n,当指定换行符时,以指定换行符区分行。一行文本称为一条记录。
默认分隔符为空格,分割出的一段称为一个字段。
命令格式:
- 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
- awk ‘{指定的动作}’ filename
对指定的文件内容,执行指定的动作。
例:
]$ awk -F: '{print NR $1,$NF}' /etc/passwd
#以冒号为分隔符,打印输出行号、第一个字段和最后一个字段。结果如下:
1root /bin/bash
2bin /sbin/nologin
3daemon /sbin/nologin
4adm /sbin/nologin
……
- 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