awk pattern { action } {filenames} # $0变量是指整条记录,$1表示当前行的第一个域,$2表示当前行的第二个域,$n当前记录的第n个域,字段间由FS分隔, 每行按 FS 字段分隔符(默认是空格或tab) # cat 1.txt Beth 4.00 0 Dan 3.75 0 kathy 4.00 10 Mark 5.00 20 Mary 5.50 22 Susie 4.25 18 # 输出文本中的1、3列 awk '{print $1,$3}’ 1.txt Beth 0 Dan 0 kathy 10 Mark 20 Mary 22 Susie 18 # $NF是number finally,表示最后一列的信息 awk '{print $NF}' 1.txt 0 0 10 20 22 18 # 筛选 第三列等于0的第一列的值 awk '$3 == 0 {print $1}' 1.txt Beth Dan # -F 指定输入文件折分隔符 cat 2.txt # 2.txt Beth:4.00:0 awk -F ':' '{print $2}' 2.txt 4.00 # 打印出每行的行号NR代表行号 awk '{print "我是行号",NR,$0}' 1.txt 我是行号 1 Beth 4.00 0 我是行号 2 Dan 3.75 0 我是行号 3 kathy 4.00 10 我是行号 4 Mark 5.00 20 我是行号 5 Mary 5.50 22 我是行号 6 Susie 4.25 18 # BEGIN 和 END # BEGIN 用于匹配第一个输入文件的第一行之前的位置, END 则用于匹配处理过的最后一个文# 件的最后一行之后的位置 awk 'BEGIN { print "标题一标题二 标题三"; print "-------------------"} { print}' 1.txt 标题一标题二 标题三 ------------------- Beth 4.00 0 Dan 3.75 0 kathy 4.00 10 Mark 5.00 20 Mary 5.50 22 Susie 4.25 18 # 打印最后一行 等同于 tail -n 1 1.txt 等同于 sed -n '$p' 1.txt awk 'END { print $0}' 1.txt Susie 4.25 18 # 设置变量 awk '{tail=($1 "~~~~~")} {print tail}' 1.txt Beth~~~~~ Dan~~~~~ kathy~~~~~ Mark~~~~~ Mary~~~~~ Susie~~~~~ # for循环 每行打印2遍 awk '{for(i=0; i < 2; i++) print $0}' 1.txt Beth 4.00 0 Beth 4.00 0 Dan 3.75 0 Dan 3.75 0 kathy 4.00 10 kathy 4.00 10 Mark 5.00 20 Mark 5.00 20 Mary 5.50 22 Mary 5.50 22 Susie 4.25 18 Susie 4.25 18 # 逆序打印 awk '{arr[NR] = $0 }END{for(i = NR;i >0;i --) print arr[i]}' 1.txt Susie 4.25 18 Mary 5.50 22 Mark 5.00 20 kathy 4.00 10 Dan 3.75 0 Beth 4.00 0 # 去重复行 awk '!($0 in x){x[$0];print $0 }' 1.txt # 其他: https://www.gnu.org/software/gawk/manual/gawk.html#Advanced-Features