大部分的应用程序都允许使用者在命令之后增加一些选择性的参数。执行awk时这些参数大部分用于指定数据文件文件名,有时希望在程序中能从命令行上得到一些其它用途的数据。本小节中将叙述如何在awk程序中取用这些参数。

  建立文件如下,命名为 see_arg:

    awk '
    BEGIN {
      for( i=; i<ARGC ; i++)
        print ARGV[i]   # 依次印出awk所记录的参数
    }
    ' $*

  执行如下命令:    

    $ ./see_arg first-arg second-arg

  结果屏幕出现:

          

说明:

  1. ARGC,ARGV[ ] 为awk所提供的内置变量。

  • ARGC:为一整数。代表命令行上,除了选项-v,-f 及其对应的参数之外所有参数的数目。
  • ARGV[ ]:为一字符串数组。ARGV[0],ARGV[1],...,ARGV[ARGC-1] 分别代表命令行上相对应的参数。

  例如,当命令行为:    

    $ awk -vx= -f program1 data1 data2

  或    

    $ awk '{ print $1 ,$2 }' data1 data2

  其 ARGC 的值为 3

    ARGV[0] 的值为 "awk"

    ARGV[1] 的值为 "data1"

    ARGV[2] 的值为 "data2"

  命令行上的 "-f program1"," -vx=36",或程序部分 '{ print $1, $2}' 都不会列入 ARGC 及 ARGV[ ] 中。

  2. awk 利用 ARGC 来判断应打开的数据文件个数。

  但使用者可强行改变 ARGC;当 ARGC 的值被使用者设为 1 时,awk将被蒙骗,误以为命令行上并无数据文件文件名,故不会以 ARGV[1],ARGV[2],...为文件名来打开文件读取数据;但在程序中仍可通过 ARGV[1],ARGV[2],...来取得命令行上的数据。

  某一程序 test1.awk 如下:

    BEGIN{
      number = ARGC #先用number 记住实际的参数个数.
      ARGC =      # 自行更改 ARGC=2, awk将以为只有一个资料文件
      # 仍可藉由ARGV[ ]取得命令行上的资料.
      for( i=; i<number; i++)
        data[i] = ARGV[i]
    }
    ........

  于命令行上键入    

    $ awk -f test1.awk data_file apple orange

  执行时 awk 会打开数据文件 data_file 以进行处理,但不会打开以appleo、range 为文件名的文件(因为 ARGC 被改成2)。但仍可通过ARGV[2]、ARGV[3]取得命令行上的参数 apple、orange。

  3. 也可以用下列命令来达成上例的效果。    

    $ awk -f test2.awk -v data[]="apple" -v data[]="orange" data_file

【译】 AWK教程指南 9读取命令行上的参数的更多相关文章

  1. 【译】 AWK教程指南

    前面的话: 这几天写了一个程序,在同一个目录里生成了很多文件,需要统计其中部分文件的总大小,发现经常用到的ls.du等命令都无济于事,我甚至都想到了最笨的方法,写一个脚本:mkdir一个新目录,把要统 ...

  2. 【译】 AWK教程指南 1前言

    前面的话: 这几天写了一个程序,在同一个目录里生成了很多文件,需要统计其中部分文件的总大小,发现经常用到的ls.du等命令都无济于事,我甚至都想到了最笨的方法,写一个脚本:mkdir一个新目录,把要统 ...

  3. 【译】 AWK教程指南 6在AWK程序中使用Shell命令

    awk程序中允许调用Shell指令,并提供管道解决awk与系统间数据传递的问题.所以awk很容易使用系统资源,读者可利用这个特点来编写某些适用的系统工具. 范例:写一个awk程序来打印出线上人数. 将 ...

  4. 【译】 AWK教程指南 附录D-AWK的内置变量

    因内置变量的个数不多,此处按其相关性分类说明,并未按其字母顺序排列. ARGC ARGC表示命令行上除了选项 -F, -v, -f 及其所对应的参数之外的所有参数的个数.若将"awk程序&q ...

  5. 【译】 AWK教程指南 11递归程序

    awk 中除了函数的参数列表(Argument List)上的参数(Arguments)外,所有变量不管于何处出现,全被视为全局变量.其生命持续至程序结束——该变量不论在function外或 func ...

  6. 【译】 AWK教程指南 7AWK应用实例

    本节将示范一个统计上班到达时间及迟到次数的程序. 这程序每日被执行时将读入两个数据文件: * 员工当日到班时间的数据文件 ( 如下列的 arr.dat ) * 存放员工当月迟到累计次数的文件 当程序执 ...

  7. 【译】 AWK教程指南 附录B-Actions

    Actions 是由下列指令(statement)所组成: 表达式 ( 函数调用,赋值...) print 表达式列表 printf( 格式化字符串, 表达式列表) if( 表达式 ) 语句 [els ...

  8. 【译】 AWK教程指南 10编写可与用户交互的AWK程序

    执行awk程序时,awk会自动从文件中读取数据来进行处理,直到文件结束.只要将awk读取数据的来源改成键盘输入,便可设计与awk 交互的程序.本节将提供一个该类程序的范例. 范例:本节将编写一个英语生 ...

  9. 【译】 AWK教程指南 4通过文本内容和对比选择指定的记录

    Pattern { Action }为awk中最主要的语法.若某Pattern的值为真则执行它后面的 Action. awk中常使用"关系表达式" (Relational Expr ...

随机推荐

  1. VC++创建、调用dll的方法步骤

    文章来源:http://www.cnblogs.com/houkai/archive/2013/06/05/3119513.html 代码复用是提高软件开发效率的重要途径.一般而言,只要某部分代码具有 ...

  2. 阅读Google的C++代码规范有感

    李开复曾在微博上说过,Google的C++代码规范是全球最好的一份C++代码规范,没有之一.最近花了点时间看了下这份代码规范,收获确实很大,在编程过程中一些乱七八糟的坏习惯也该改一改了.最新的英文版见 ...

  3. 强连通分量Tarjan模板

    #include<iostream> #include<stdio.h> #include<string.h> #include<stack> #inc ...

  4. 对.net orm工具Dapper在多数据库方面的优化

    Dapper是近2年异军突起的新ORM工具,它有ado.net般的高性能又有反射映射实体的灵活性,非常适合喜欢原生sql的程序员使用,而且它源码很小,十分轻便.我写本博客的目的不是为了介绍Dapper ...

  5. spring dataSourceRouter自动切换数据源

    spring多数据源的切换,主要用到的是AbstractRoutingDataSource这个路由类,当我们的自定义的一个路由分发类继承AbstractRoutingDataSource类后,重写de ...

  6. centos7 下载eclipse的镜像站点

    这里吐槽一下,由于两天前centos被我农崩溃了(系统更新的锅),所以所有的开发环境又得重来一次. 其实,之前去eclipse的官网下载就很慢,打开官网也很慢,然后你会发现下下来的安装程序(只有40多 ...

  7. Javascript和ECMAScript二三事

    来自<javascript高级程序设计 第三版:作者Nicholas C. Zakas>的学习笔记(一) Javascript是一种专为与网页交互而设计的脚本语言,由下列三个不同部分组成: ...

  8. [转载]Dotfuscator Professional Edition 4.9.7500.9484 混淆工具破解版+使用教程

    如有转载,请注明出处: http://www.cnblogs.com/flydoos/archive/2012/01/26/2329536.html Dotfuscator Professional ...

  9. 【网络】IP地址分配、端口号、分层

    3.网络分层 OSI的七层网络结构图和TCP/IP的五层结构图 OSI七层模型OSI中的层            功能                                          ...

  10. 【leetcode】Word Break (middle)

    Given a string s and a dictionary of words dict, determine if s can be segmented into a space-separa ...