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从入门到入土(16)awk变量类型探讨--关于数字和string两种类型
awk从入门到入土(16)awk变量类型探讨--关于数字和string两种类型