awk的使用 第八部分 awk如何读取命令行的参数

在linux/unix中大部分的应用程序都允许用户在命令之后增加一些参数,在执行awk 程序是,也可以在awk程序后增加一些参数,这些参数一般是用来指定数据文件的文件名。这里,我们看一下awk程序是如何使用这些参数的。   建立文件analyse.awk,内容如下:
root@myfreelinux pub]# cat analyse.awk
#!/bin/bash
awk ‘BEGIN{
for(i=0;i<ARGC;i++)
 print ARGV[i];# 依次印出awk所记录的参数
}’ $*
 执行结果如下:
[root@myfreelinux pub]# bash analyse.awk first-arg second-arg
awk
first-arg
second-arg

    解释说明:ARGC,ARGV[ ]是awk的内建变量。
    ARGC :是一整数,代表命令行上除了选项-v, -f 及其对应的参数之外所有参数的个数。
    ARGV[ ] 是一字符串数组,ARGV[0],ARGV[1],。。。ARGV[ARGC-1]分别代表命令行上相对应的参数。   
    比如在这里执行的命令[root@myfreelinux pub]# bash analyse.awk first-arg second-arg,ARGC的值是3,ARGV[0]是”awk”,ARGV[1]的值为”first-arg”, ARGV[2]的值是”second-arg”。
    再比如#awk -vx=21-f program fir-data sec-data

#awk ‘{ print $1 ,$2 }’  fir-data sec-data
    这两条ARGC 值都是3,ARGV[0]是”awk”,ARGV[1]是”fir-data”,ARGV[2]是”sec-data”,命令行上的”-f program”,” -vx=21″,程序部分’{ print $1,  $2}’ 都不会被列入ARGC和ARGV[ ]中。
    awk 利用ARGC 来判断要打开的数据文件的个数,但是用户可以强行更改ARGC的值;比如将ARGC的值被用户设置为1,那么awk将被蒙骗,误以为命令行上没有数据文件文件, 所以不会以 ARGV[1],ARGV[2]等作为文件名来打开文件并读取数据;但是在程序中可以使用ARGV[1],ARGV[2]等变量来取得命令行上数据文件的数据。

     现在有一个awk程序内容如下:
[root@myfreelinux pub]# cat test1.awk
#!/bin/awk -f
BEGIN{
for(i=0;i<ARGC;i++)
 print ARGV[i];
}
执行以上程序的结果如下:
[root@myfreelinux pub]# awk -f test1.awk arrive.dat today_result1
awk
arrive.dat
today_result1
    加入将test1.awk的内容更改成test2.awk的内容如下:
 [root@myfreelinux pub]# cat test2.awk
#!/bin/awk -f
BEGIN{
number=ARGC; #用number 记住实际的参数个数
ARGC=2;#设置ARGC=2,awk将以为只有一个资料文件
for(i=0;i<ARGC;i++)
 print ARGV[i];
}
执行并查看运行结果:
[root@myfreelinux pub]# awk -f test2.awk arrive.dat today_result1 today_result2
awk
arrive.dat
这个时候会发现,虽然同样ARGC=3,但是人为的设置ARGC=2,后,awk在执行的时候,只认为有一个参数arrive.dat。
将test2.awk修改成以下内容:
[root@myfreelinux pub]# cat test3.awk
#!/bin/awk -f
BEGIN{
number=ARGC;
ARGC=2;
for(i=0;i<ARGC;i++)
        print ARGV[i];
for(i=ARGC;i<number;i++)
        print ARGV[i];
}
运行并查看运行结果如下:
[root@myfreelinux pub]# awk -f test3.awk arrive.dat today_result1 today_result2
awk
arrive.dat
today_result1
显然,通过修改ARGC可以修改awk能够识别的参数的个数,但是实际存在的ARGV的内容,仍然可以访问的。比如在这里ARGC设置为2后,awk只能打开ARGV[1]=arrive.dat,但是我们可以使用ARGV[2],ARGV[3]取得命令行上的参数today_result1,today_result2。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值