1.字段以:分隔,打印第一列

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

2.字段以:分隔,打印第一列和第三列

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

3.文件形式的执行

vim test.awk 写入
BEGIN {FS=":"}
{print $1}
awk -f test.awk /etc/passwd

4.普通过滤代码块

字段以:分隔,输出 以a开头的第一列数数据
awk 'BEGIN{FS=":"} /^a/{print $1}' /etc/passwd
字段以:分隔,输出第一列为root的一行数据
awk 'BEGIN{FS=":"} $1=="root"{print $0}' /etc/passwd
字段以:分隔,输出第七列为nologin的第一列数数据
awk 'BEGIN{FS=":"} $7 ~ "nologin"{print $1}' /etc/passwd
字段以:分隔,输出不包含nologin 的第一列数数据
awk 'BEGIN{FS=":"} !/nologin/{print $1}' /etc/passwd

5.字段分隔符(FS)

FS="\t+" 一个或者多个TAB分隔
FS="[[:space:]+]" 一个或者多个空白分隔 ,默认的
FS="(foo|:)" 以foo或者:分隔

6.字段数量(NF)

NF: number of fileds 字段数量,通常只读
NF==3{print "字段为3的行:" $0}
第二列之后的数据
{
if(NF>2){
print $1 $2 $3
}
}

7.记录数量(NR)

NR: number of records 记录(行)数量,当前awk遍历过的函数,动态变化
NR==3{print "第三行"}
跳过前10行
{
if(NR>10){
print $0
}
}

8.FS和RS例子

my.txt
路人甲
电话:110
手机:138110
路人乙
电话:120
手机:138120
awk 'BEGIN{FS="\n";RS=""} {print $1"\t"$2"\t"$3}' my.txt
说明: FS="/n" 每一列以\n(换行)来分隔, RS=""每一行以空格来分隔
结果如下
路人甲 电话:110 手机:138110
路人乙 电话:120 手机:138120

9.OFS和ORS

OFS:字段输出分隔符,默认是" "
ORS:记录输出分隔符,默认为"\n"
my.txt
路人甲
电话:110
手机:138110

路人乙
电话:120
手机:138120

awk 'BEGIN{FS="\n";RS="";OFS="\t";ORS="\n"} {print $1,$2,$3}' my.txt
说明:
FS="/n" 每一列以\n(换行)来分隔, RS=""每一行以 【空行】 来分隔
OFS="/t" 每一列输出用 \t 来分隔, ORS=""每一行以 \n换行 来分隔

结果如下
路人甲 电话:110 手机:138110
路人乙 电话:120 手机:138120

10.循环语句

my.txt
路人甲
电话:110
手机:138110

路人乙
电话:120
手机:138120
QQ:123456
awk 'BEGIN{FS="\n";RS="";ORS=""} {for(x=1;x<=NF;x++){print $x"\t"}print "\n"}' my.txt

结果如下
路人甲 电话:110 手机:138110
路人乙 电话:120 手机:138120 QQ:123456