使用变量
- 内建变量
内建变量FS和OFS分别是输入字段分隔符和输出字段分隔符。
echo "1,2,3" | gawk 'BEGIN{FS=","; OFS="-"}{print $1,$2,$3}'
FIELDWIDTHS变量允许不靠字段分隔符来读取记录。根据提供的字段宽度来计算字段。
echo "12345" | gawk 'BEGIN{FIELDWIDTHS="2,3"}{print $1,$2}'
- 自定义变量
在脚本中给变量赋值
gawk 'BEGIN{testing="this is a test"; print testing}'
处理数组
- 定义数组变量
gawk 'BEGIN{capital["abc"] = "def"; print capital["abc"]}'
gawk 'BEGIN{var[1]=34; var[2]= 3; var[3]=var[1]+var[2]}'
-遍历数组变量
gawk 'BEGIN{var["a"]=1; for (test in var) { print var[test] } }'
-删除数组变量
gawk 'BEGIN{var["a"]=1; delete var["a"] }'
匹配操作符
~可以值地暖匹配操作符,数据字段变量以及要匹配的正则表达式
gawk 'BEGIN{FS=","} $2 ~ /^data2/{print $0}'
echo "one" | gawk '$1 ~/one/ {print $1}'
也可以用!符号来排除匹配
gawk -F: '$1 !~ /rich/{print $1,$NF}'
echo "one" | gawk '$1 !~/one/ {print $1}'
数学表达式
在匹配模式中使用表达式
echo "one" | gawk '$1 == "one" {print $1}'
结构化命令
- if
gawk `{if ($1 > 20) { print $1 } }`
- while
gawk `{ i = ; while (i < 4) { i++ }}`
- do-while
- for
格式化打印
gawk 'BEGIN{ x=10*100; printf "%d\n",x}'
内建函数
gawk编程语言提供了不少内置函数,可以进行一些常见的数学,字符串以及时间操作。
gawk 'BEGIN{x=exp(100); print x}'
自定义函数
在定义函数时,它必须出现在所有代码块之前。
gawk 'function myprint() { printf "%d" $1} BEGIN{FS="\n"}{ myprint()}'
创建函数库
可以将多个函数放在一个库文件中,用-f命令来使用
gawk -f funclib -f script data.txt