awk

2017-12-31  本文已影响0人  reworthYan

awk

awk是一种处理文本的语言,是一个强大的文本分析工具,awk是以列为划分记数的,$0表示所有列,$1表示第一列,$2表示第二列。

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的所有行。

内置变量

内置函数

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);}}'

上一篇 下一篇

猜你喜欢

热点阅读