再探gawk

使用变量

  • 内建变量
    内建变量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

你可能感兴趣的:(再探gawk)