awk从入门到入土(23)awk内置变量ARGCARGC--命令行参数传递

Posted 奇妙之二进制

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了awk从入门到入土(23)awk内置变量ARGCARGC--命令行参数传递相关的知识,希望对你有一定的参考价值。

awk可以通过-v var=value的形式向awk脚本传递变量,除了这种方式之外,还可以直接在awk命令行上直接传递,如:

$ echo a | gawk \'BEGIN for(i = 0 ; i < ARGC; i++) print ARGV[i]\' xx
gawk
xx

awk提供了两个内置变量,ARGC表示命令行参数个数,ARGV是个存放命令行参数的数组,大小由ARGC指示。

注意,名字区分大小写。

可是,我们发现,如果增加一条非BEGIN语句,则会出错:

$ echo a | gawk  \'BEGIN for(i = 0 ; i < ARGC; i++) print ARGV[i] \' xx
gawk
xx
gawk: cmd. line:1: fatal: cannot open file `xx\' for reading: No such file or directory

awk似乎将后面的参数作为待处理文件的名字了。

真是原因是awk会依次读取ARGV数组的元素,将其作为待处理文件的名字进行处理。

幸运的是,我们可以通过修改ARGV数组来避免这个问题。

直接减小ARGC的值,会导致awk不会读取尾部的一些文件。此外,增减ARGC的值,都不会影响ARGV数组,仅仅只是影响awk读取文件的数量。

# ARGC的值是3,修改成2,不会读取b.txt
awk \'BEGINARGC=2print\' a.txt b.txt

以上是关于awk从入门到入土(23)awk内置变量ARGCARGC--命令行参数传递的主要内容,如果未能解决你的问题,请参考以下文章

awk从入门到入土认识awk内置变量和变量的使用

awk从入门到入土(16)awk变量类型探讨--关于数字和string两种类型

awk从入门到入土(16)awk变量类型探讨--关于数字和string两种类型

awk从入土到入门(10)awk内置函数

awk从入门到入土awk内置函数printf和print实现格式化打印

awk从入门到入土用户自定义变量