awk [options] 'program' file

注意:program部分只能用单引号,不能用双引号,否则会报错.

1、常用命令选项

-F            指定分隔符,默认空格或Tab键

-f            调用awk脚本

-v            调用外部shell变量

2、awk内置变量

$1..$n        指定分隔符号对应的值

$0            当前行的内容

$NF           最后一列

NF            指定分隔符号后,行的列数

NR            当前行的行号

FS            保存或设置字段分隔符

FNR           保存当前文件的行数

FILENAME      保存当前的文件名

ENVIRON       调用shell环境变量

awk '{print $0}' a.txt               #打印文件所有内容($0代表整行)

awk '{print $1,$2}' a.txt            #打印第1列和第2列的内容

awk -F":" '{print $1,$2}' OFS="," a.txt           #以:为输入分隔符并且以,为输出分隔符打印第1列和第2列的内容

awk -F"," '{print NR,$NF}' a.txt        #以,为分隔符并打印行号和最后一列

awk -F"[ .]" '{print $(NF-1)}' OFS="\t" a.txt     #以空格或.为输入分隔符并以制表符为输出分隔符打印倒数第二列

3、正则表达式

/正则/        匹配正则(行)

~/正则/       匹配正则(列)

!~/正则/      不匹配

awk -F":" '$1~/root/ {print $0}'  /etc/passwd

awk -F":" '$1!~/root/ {print $0}'  /etc/passwd

awk -F":" '$1~/^ro/ {print $3}' /etc/passwd

awk -F":" '$1~/[0-9]/ {print $1,$6}' /etc/passwd

4、数值比较 

awk -F":" '$3==0{print $0}' /etc/passwd

awk -F":" '$3!=0{print $0}' /etc/passwd

awk -F":" '$1=="root"{print $0}'  /etc/passwd

5、逻辑比较(多个条件)

逻辑与 &&  多个条件同时成立

逻辑或 ||  多个条件有一个成立

逻辑非 !   取反

awk  -F":" '$7=="/bin/bash" && $3<500{print $0}' /etc/passwd

awk  -F":" '$7=="/bin/bash" || $3<500{print $0}' /etc/passwd