AWK作用
生成文本格式化的报表
本质:脚本语言解释器,一门编程语言,支持条件判断、数组、循环等功能。
使用格式:awk [options] 'Pattern{Action}'
file
原理:awk是逐行处理的,默认以"换行符"为标记,识别每一行;默认使用空格作为分隔符。
内置变量
$0 显示整行,NF当前行被分隔字段数,$NF最后一个字段,NR当前行数
打印输出(常用action)
awk '{print}' test # 打印文本
awk '{print $2,$4,$5}' test
#打印指定第2,4,5列
#格式化输出(拼接指定字符串)
awk '{print $2,$4,666}' test #123 abc
666
awk '{print "diyilie:"$1,"dierlie:"$2}'
test
#diyilie:123 dierlie:abc
模式
特殊模式(BEGIN+END)
BEGIN:执行文本前操作 END:执行文本后操作
#cat test
abc 123 iuy ddd
8ua 456 auv ppp 777
awk 'BEGIN{print "aaa","bbb"} {print
$1,$2}END{print "ccc","ddd"}' test
aaa bbb
abc 123
8ua 456
ccc ddd
空模式
没有任何条件 awk '{print $0}' test
关系运算模式
awk 'NF==5{print $0}' test
awk '$1==123 {print $0}' test
关联数组用于分组统计
awk ' {count[$1]++} END{for(i in count
){print i,count[i]}}' test
跳过某行处理
awk '{if(NR==1){next};print $0}' test
正则模式
awk'/正则表达式/{print $0}' file
正则选项:awk --posix
'$2~/192\.168\.[0-9]{1,3}\.[0-9]{1,3}/{print $1,$2}' file
行范围模式
awk'/正则1/,/正则2/{print $0}' file
输入输出分隔符(常用选项)
输入分隔: -F# or -v FS='#'
输出分隔: -v OFS='---'
-v:设置变量的值
内置函数
数值类
srand(),rand()随机值
int()取整
字符串类
gsub("l","L",$1)# 替换函数
gsub("[a-z]",6,$1)# 替换函数,小写字母替换6
sub("l","L",$1)# 首次替换函数
length(),默认参数$0
split(ts,shuzu,":")#ts="11:22:33"
,切分字符串ts至数组shuzu,下标从1开始可以遍历
asort(shuzu,newshuzu);根据元素值排序
asorti(shuzu,newshuzu);根据元素下标排序
三目运算
awk -F:'{$3<500?a++:b++}
END{print a,b}' file
打印奇偶行
awk 'i=!i' file (打印奇数行)
awk '!(i=!i)' file (打印偶数行)