awk
awk是一种处理文本的语言,是一个强大的文本分析工具,awk是以列为划分记数的,$0表示所有列,$1表示第一列,$2表示第二列。
awk常用参数
- -F指定输入文件分隔符,如-F:
- -v 赋值一个用户定义变量,如-va=1
- -f 从脚本文件中读取awk命令
多个分隔符
awk -F '[-|]' '{print $3}' data
上面这个例子是以-和|为分隔符进行分割。
设置变量
设置awk自定义变量,使用参数-v
cat data.txt | awk -v a=9 '{print $1,$1+a}'
如上,设置了变量a的值,在输出的时候添加一个$1+a的值。
逻辑判断
cat data.txt | awk '$1=="reworth" {print}
输出第一列为reworth的所有行。
cat data.txt | awk '$1!="reworth" {print}'
输出第一列不是reworth的所有行。
正则匹配
cat data.txt | awk '$2 ~ /reworth.*/ {print}'
匹配第二列中以reworth开头的所有行。对某列进行匹配时需要在列之后加个~表示进行匹配。
cat data.txt | awk '/reworth.*/ {print}'
匹配以reworth开头的所有行。
匹配取反 !~
cat data.txt | awk '$2 !~ /reworth/ {print}'
匹配第二列不是reworth的所有行。
内置变量
- FILENAME : 当前输入文件名称
- NF : 当前输入行的字段编号
- OFS : 输出字段分隔符
- NR : 当前输入行编号(是指输入行 1,2,3……等)
- FS : 输入字段分隔符
- ORS : 输出记录分隔符
- RS : 输入记录分隔符
内置函数
substr字符串截取
cat data.txt | awk '{print substr($1,1,4)}'
截取第一列中的第一个到第四个字符。
split 切片
cat data.txt |awk '{split($1,a,",");print a[1],a[2],a[3]}'
以逗号分隔第一列,并输出分隔后的数据。
gsub 替换
cat data.txt | awk ''{gsub("abc","asd",$2);print}
将第二列中的abc替换成asd
统计
grep 'tower_activity_op' /data/s*/log/test.log | awk -F'[=,]' '{a[$2] -= $12; b[$2] -= $14; item_count[$2]++;} END{for(i in a) {serverid=i; cmd="/usr/bin/mysql -u root -h "192.168.0.1" -p1234 -D stat -e "replace into test(date,uid,cash,coins,number,code,serverid) values(\047'$Date'\047,"i","a[i]","b[i]","item_count[i]",\047测试\047,"serverid")""; system(cmd);}}'