侧边栏壁纸
博主头像
张种恩的技术小栈博主等级

行动起来,活在当下

  • 累计撰写 747 篇文章
  • 累计创建 65 个标签
  • 累计收到 39 条评论

目 录CONTENT

文章目录

AWK(8)之自定义函数

zze
zze
2019-12-25 / 0 评论 / 0 点赞 / 639 阅读 / 1977 字

不定期更新相关视频,抖音点击左上角加号后扫一扫右方侧边栏二维码关注我~正在更新《Shell其实很简单》系列

本部分内容参考自《Linux命令行与shell脚本编程大全 第3版》。

除了 gawk 中的内建函数,还可以在 gawk 程序中创建自定义函数。

定义函数

要定义自己的函数,必须用 function 关键字。

function name([variables])
{
    statements
}

函数名必须能够唯一标识函数。可以在调用的 gawk 程序中传给这个函数一个或多个变量。

function printthird()
{
    print $3
}

这个函数会打印记录中的第三个数据字段。
函数还能用 return 语句返回值:

return value

值可以是变量,或者是最终能计算出值的算式:

function myrand(limit)
{
    return int(limit * rand())
}

你可以将函数的返回值赋给 gawk 程序中的一个变量:

x = myrand(100)

这个变量包含函数的返回值。

使用自定义函数

在定义函数时,它必须出现在所有代码块之前(包括 BEGIN 代码块)。乍一看可能有点怪异,但它有助于将函数代码与 gawk 程序的其他部分分开。

$ gawk '
> function myrand(limit){
>     srand() # 让 rand() 产生的随机数发生变化
>     return int(limit*rand())
> }
> BEGIN{
> result = myrand(100)
> print result
> }'
49

这个函数定义了 myrand() 函数,它会随机生成一个 0~100 之间的整数。在 gawk 程序中调用该函数并获取返回值然后打印到屏幕。
一旦定义了函数,你就能在程序的代码中随意使用。在涉及很大的代码量时,这会省去许多工作。

创建函数库

显而易见,每次使用函数都要重写一遍并不美妙。不过, gawk 提供了一种途径来将多个函数放到一个库文件中,这样你就能在所有的 gawk 程序中使用了。
首先,你需要创建一个存储所有 gawk 函数的文件。

$ cat awkfunc.lib 
function myprint()
{
      printf "%-16s - %s\n", $1, $4
}
function myrand(limit)
{
      srand()
      return int(limit * rand())
}
function printthird()
{
      print $3
}

awkfunc.lib 文件含有三个函数定义。需要使用 -f 命令行参数来使用它们。很遗憾,不能将 -f 命令行参数和内联 gawk 脚本放到一起使用,不过可以在同一个命令行中使用多个 -f 参数。
因此,要使用库,只要创建一个含有你的 gawk 程序的文件,然后在命令行上同时指定库文件和程序文件就行了。

$ cat awktest 
BEGIN{
	result = myrand(100)
	print result
}
$ gawk -f awkfunc.lib -f awktest
43

你要做的是当需要使用库中定义的函数时,将 awkfunc.lib 文件加到你的 gawk 命令行上就可以了。

0
AWK

评论区