命令行參数的一个重要限制是它们在BEGIN过程中是不可用的。

也就是说,直到首行输入完毕以后它们才可用。为什么?这是一个easy混乱的部分。从命令行传递的參数就好像文件名称一样被处理。赋值操作知道这个变量(假设它是一个文件名称)被求值时才进行。

參阅以下的脚本,该脚本将变量n设置为一个命令行參数。

awk ' BEGIN { print n }

if (n == 1) print "Reading the first file"

if (n == 2) print "Reading the second file"

}' n=1 test
n=2 test2

这里有4个命令行參数: "n=1 "、"test" 、"n=2 "和"test2"。假设你如今还记着BEGIN过程即"在处理输入之前所要做的",你将会理解为什么在BEGIN过程中的參数n返回值为空,因此print语句将打印一个空行。

假设第一个參数是一个文件而不是一个变量赋值。该文件会知道BEGIN过程运行后才被打开。

第一个參数为变量n赋初值1 ,第二个參数提供了文件名称。因此,对于test中的每一行。条件"n==1 "都为真。在读完test中的全部行之后,计算第三个參数,并将n赋值为2 。最后。第四个參数提供了第二个文件名称。这时在主过程中的条件"n==2"为真。

以这样的方法对參数求值的后果是不能用BEGIN过程測试或检验命令行提供的參数。

仅仅有当输入一行后它们才可以使用。要了解这样的局限性,可以通过编写规则"NR==1"并使用它的过程来检验參数的赋值。

还有一个方法是在调用awk之前在shell脚本中測试命令行參数。

POSIX awk提供了一个解决问题的方法,即在不论什么输入被读入前定义參数。用-v选项指定要在运行BEGIN 过程之前得到变量赋值(也就是,在读入第一个输入行之前)。-v选项必须在一个命令行脚本前说明。比如:下列命令使用-v选项为多行记录设置记录分隔符。

$ awk -F'\n"
-v RS="" '{ print }'
phones.block

每一个传递给程序的变量赋值都须要一个不同的-v选项。

和C程序语言类似。awk也提供系统变量ARGC和ARGV。

由于这须要了解数组。我们将在第八幸"条件、循环和数组"中讨论这些特点。

awk向脚本传递參数(二)的更多相关文章

  1. Android开发之Fragment传递參数的几种方法

    Fragment在Android3.0開始提供,而且在兼容包中也提供了Fragment特性的支持. Fragment的推出让我们编写和管理用户界面更快捷更方便了. 但当我们实例化自己定义Fragmen ...

  2. nginx负载均衡向后台传递參数方法(后端也是nginxserver)

    做了一个站点是用nginx 做的负载均衡.后端也是多个nginxserver 遇到了一个问题.当做SSL支持时 前端nginx分发到 后端nginx后就成 http形式了(这样后台php用$_SERV ...

  3. FPGA编程基础(一)--參数传递与寄存器使用

    一.參数映射 參数映射的功能就是实现參数化元件.所谓的"參数化元件"就是指元件的某些參数是可调的,通过调整这些參数从而可实现一类结构类似而功能不同的电路.在应用中.非常多电路都可採 ...

  4. Fragment进阶(四)----->參数传递3种写法

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/ ...

  5. int 0x13中断的參数传递

    int 0x13中断向量所指向的中断服务程序实质上就是磁盘服务程序. 用途:将指定扇区的代码载入到内存的指定位置. 因此,在使用int 0x13中断时要将參数传递给服务程序: 比如:将指定扇区和载入的 ...

  6. c++參数传递

    定义: 形參:指出如今Sub 和Function过程形參表中的变量名.数组名,该过程在被调用前.没有为它们分配内存.其作用是说明自变量的类型和形态以及在过程中的作用.形參能够是除定长字符串变量之外的合 ...

  7. struts开发<struts中的參数传递.三>

    不说废话,直接上干货 1.通过set和get传递參数 添加username 和password两个属性并添加set和get方法 package fzl.user.struts.demo; import ...

  8. ionic新手教程第七课-简要说明几种界面之间的參数传递及优缺点

    截至2016年4月13日19点32分,我公布的ionic新手教程,已经公布6课了, 总訪问量将近6000,平均每节课能有1000的訪问量.当中訪客最多的是第三课有2700的訪客. watermark/ ...

  9. 我的Spring之旅(二):为请求加入參数

    1.前言 在上一篇我的Spring之旅(一)中,我们仅仅是利用不带參数的请求返回一个网页或一段json,在实际的B/S.C/S网络交互中,请求中须要自己定义的參数.本篇将简单地为之前的请求加入參数. ...

随机推荐

  1. Android:singleTask + onActivityResult

    解决2个Activity互相跳转,并且栈中只保留每个Activity一个对象的存在. 在2个Activity中分别都要用到onActivityResult,所以就不能用launchMode=" ...

  2. js操作当前窗口

      CreateTime--2017年7月21日09:58:34Author:Marydon js操作当前窗口 1.打开一个新的窗口(新的标签页) 实现方式:window.open(url) 实例一: ...

  3. JavaScript经常使用代码段

    把例如以下代码增加<body>区域中: 后退 前进 <!--<input type="button" value="后退" onClic ...

  4. zrrx笔试题(一)——文件复制&日期天数差

    1. 利用输入输出流来复制文件 步骤:1.构造文件字节输入输出流  2.创建一个字节数组,用来指定每次复制的字节大小   3.输入流从源文件读取字节,输出流将字节写入文件 import java.io ...

  5. Java分布式 一些概念理解

    转至 java那些事 2017-02-09  有些朋友工作一年了觉得该深入一下子了,所以想深入学习一下以提升自己的专业技能,想问一下如何入门Java分布式应用,学习过程大致是怎么样的,涉及到那些知识, ...

  6. iPhone6 和 iPhone 6 plus的适配

    苹果每出一款产品,都会引起广大IOS程序猿们的深深关注!是不是又该做适配了?是不是又该学习新东西了?种种的操心挂在心头. 以下我谈谈我对iPhone6 和 iPhone 6 plus适配问题的理解: ...

  7. Eclipse Jetty Integration

    http://eclipse-jetty.sourceforge.net/ Introduction Eclipse Jetty Integration provides a launch confi ...

  8. QT .pro文件 LIBS用法详解

    在程序中需要使用到团队其它成员开发的静态库和动态库,起初是知道使用LIBS变量在在.pro文件中指定需要包含的库,但是实际使用的时候却遇到很大麻烦,但其实确实是因为自己看官方文档不太用心造成的. 下面 ...

  9. [转]ubuntu安装gcc

    Ubuntu缺省情况下,并没有提供C/C++的编译环境,因此还需要手动安装. 如果单独安装gcc以及g++比较麻烦,幸运的是,为了能够编译Ubuntu的内核,Ubuntu提供了一个build-esse ...

  10. windows7常用操作命令

    1.打开命令行 按住Windows键加R键,打开运行窗口 2.打开笔记本 运行窗口中输入:notepad,点击确定或回车,打开记事本工具 主要作用:浏览网页时,看到一些有用的话,那么你是怎么把它记录下 ...