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