1. awk简介
awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk。
awk名字来源于三位创造者Aho、Weinberger和Kernighan统称。
awk擅长处理文本数据。
2. 基本用法
awk [-Ffs] [-v var=value] [program | -f progfile …] [file …]
选项与参数:
-F 指定域分隔符,例如:-F “|”,即以|作为域分隔符,默认分隔符为一个或多个空格或TAB,即”[[:space:]][[:space:]]*”。
-v 定义变量,从shell给awk传递变量,如-vDATE=$DATE,即将shell中$DATE变量值传递给awk变量DATE。
-f 指定脚本文件,例如-f progfile。
program 操作模块
示例:
1 | # awk -F ":" '{print $1,$2}' /etc/passwd -F 分隔符 $1是第一列 $2是第二列 |
- 模式匹配
格式:awk ‘/patten/ {action} ‘ filename
//纯字符匹配
!//纯字符不匹配
~//字段值匹配
!~//字段值不匹配
~/a1|a2/字段值匹配a1或a2
1 | # awk '/mysql/' /etc/passwd |
- 操作模块
awk [-Ffs] ‘BEGIN {处理文件前执行的代码块} {处理文件过程中执行的代码块} END {处理文件后执行的代码块}’ filename
BEGIN{
}
{
}
END{
}
BEGIN和END只执行一次。
1 | # awk -F: '{print "用户名\t\tUID"}{print $1"\t"$3}' /etc/passwd |
- 内置变量
| 属性 | 说明 |
|---|---|
| $0 | 当前记录行,代表一行记录 |
| $1到n | 当前记录的第n个字段,字段间由FS分隔 |
| FS | 输入字段分隔符,默认是空格或tab |
| NF | 当前记录中的字段个数,就是有多少列,一般取最后一列字段 |
| NR | 已经读出的记录数,就是行号,从1开始 |
| RS | 输入的记录分隔符,默认为换行符 |
| OFS | 输出字段分隔符,默是空格 |
| ORS | 输出的记录分隔符,默认为换行符 |
示例
1 | 打印第五行 |