因内置变量的个数不多,此处按其相关性分类说明,并未按其字母顺序排列。

  • ARGC

  ARGC表示命令行上除了选项 -F, -v, -f 及其所对应的参数之外的所有参数的个数。若将"awk程序"直接写在命令列上,则 ARGC 亦不将该"程序部分"列入计算。

  • ARGV

  ARGV数组用以记录命令列上的参数。

例:执行下列命令

    $ awk  -F\t -v a= -f prg.awk  file1.dat file2.dat

    $ awk  -F\t -v a= '{ print $1 * a }' file1.dat file2.dat

执行上述任一程序后

  ARGC    =  3

    ARGV[0] = "awk"

    ARGV[1] = "file1.dat"

    ARGV[2] = "file2.dat"

  读者请留心:当 ARGC = 3 时,命令行上仅指定了 2 个文件。

注:

  -F\t 表示以 tab 为字段分隔字符 FS(field seporator)。

  -v a=8 用以初始化程序中的变量 a。

  • FILENAME

  FILENAME用以表示目前正在处理的文件的文件名。

  • FS

  字段分隔字符。

  • $0

  表示目前awk所读入的数据行。

  • $1,$2..

  分別表示所读入的数据行的第一个字段,第二个字段,...(参考下列说明)  

  当awk读入一行数据 "A123  8:15" 时,会先以$0 记录,故 $0 = "A123  8:15"。若程序中进一步使用了 $1, $2.. 或 NF 等内置变量时,awk才会自动分割 $0以便取得字段相关的数据,切割后各个字段的数据会分別以$1, $2, $3...记录。

  awk缺省(default)的 字段分隔字符(FS) 为 空白字符(空格及tab)。以本例而言,读者若未改变 FS,则分割后:

    第一个字段($1)="A123", 第二个字段($2)="8:15"。

  使用者可用正则表达式自行定义 FS。awk每次需要分割数据行时,都会参考目前FS的值。

例如:

  令 FS = "[ :]+" 表示任何由 空白" " 或 冒号":" 所组成的字串都可当成分隔字符,则分割后:

    第一个字段($1) = "A123",第二个字段($2) = "8",第三个字段($3) = "15"

  • NR

  NR 表示从 awk 开始执行该程序后所读取的数据行数。

  • FNR

  FNR 与 NR 功用类似,不同的是awk每打开一个新的文件,FNR 便从 0 重新累计。

  • NF

  NF表示目前的数据行所被切分的字段数。awk 每读入一行数据后,在程序中可用 NF 来得知该行数据包含的字段个数。在下一行数据被读入之前,NF 并不会改变。但使用者若自行使用$0来记录数据,例如:使用 getline,此时 NF 将代表新的 $0 上所记载的数据的字段个数。

  • OFS

  输出时的字段分隔字符。缺省为 " "(一个空白),详见下面说明。

  • ORS

  输出时数据行的分隔字符。缺省为 "\n"(换行),见下面说明。

  • OFMT

  数值数据的输出格式。缺省为 "%.6g"(若须要时最多打印6位小数)

  当使用 print 指令一次打印多项数据时,

例如:print $1, $2

  输出时,awk会自动在 $1 与 $2 之间补上一个 OFS 的值(缺省为一个空白)。

  每次使用 print 输出后,awk会自动补上 ORS 的值(缺省为换行符)。

  使用 print 输出数值数据时,awk将采用 OFMT 的值为输出格式。

例如:

    $ awk 'BEGIN { print 2/3,1; OFS=":"; OFMT="%.2g"; print 2/3,1 }'

输出:

  程序中通过改变OFS和OFMT的值,改变了指令 print 的输出格式。

  • RS

  RS( Record Separator):awk从文件上读取数据时,将根据 RS 的定义把数据切割成许多记录,而awk一次仅读入一条记录进行处理。

  RS 的缺省值是 "\n",所以一般 awk一次仅读入一行数据。有时一个Record含括了几行数据(Multi-line Record),这情況下不能再以"\n"

来分隔相邻的记录,可改用 空白行 来分隔。

  在awk程序中,令 RS = "" 表示以 空白行 来分隔相邻的记录。

  • RSTART

  与使用字串函数 match( )有关的变量,详见下面说明。

  • RLENGTH

  与使用字串函数match( )有关的变量。

  当使用者使用 match(...) 函数后,awk会将 match(...) 执行的结果以RSTART、RLENGTH 记录。

  请参考 附录 C awk的内置函数 match()。

  • SUBSEP

  SUBSEP(Subscript Separator) 数组下标的分隔字符,缺省值为"\034"。

  实际上,awk中的 数组 只接受 字串 当它的下标,如: Arr["John"]。但使用者在 awk 中仍可使用 数字 当阵列的下标,甚至可使用多维的数组(Multi-dimenisional Array) 如:Arr[2,79]。事实上,awk在接受 Arr[2,79] 之前,就已先把其下标转换成字串"2\03479",之后便以Arr["2\03479"] 代替 Arr[2,79]。

可参考下例:

    awk 'BEGIN {
      Arr[,] =
      print Arr[,]
      print Arr[ , ]
      print Arr["2\03479"]
      idx = SUBSEP
      print Arr[idx]
    }
    ' $*

执行结果:

      

【译】 AWK教程指南 附录D-AWK的内置变量的更多相关文章

  1. 【译】 AWK教程指南 附录A-Patterns

    awk 通过判断 Pattern 的值来决定是否执行其后所对应的Actions.这里列出几种常见的Pattern: A.1 BEGIN BEGIN 为 awk 的保留字,是一种特殊的 Pattern. ...

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

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

  3. 【译】 AWK教程指南 附录E-正则表达式

    为什么要使用正则表达式 UNIX 中提供了许多 指令 和 tools,它们具有在文件中 查找(Search)字串或替换(Replace)字串 的功能.像 grep, vi , sed, awk,... ...

  4. 【译】 AWK教程指南 附录C-AWK的内建函数

    C.1 字串函数 index( 原字串, 查找的子字串 ) 若原字串中含有欲寻找的子字串,则返回该子字串在原字串中第一次出现的位置,若未曾出现该子字串则返回0. 例如: $ awk 'BEGIN{ p ...

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

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

  6. 【译】 AWK教程指南

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

  7. 【译】 AWK教程指南 3计算并打印文件中指定的字段数据

    awk 处理数据时,它会自动从数据文件中一次读取一条记录,并会将该记录切分成一个个的字段:程序中可使用 $1, $2,... 直接取得各个字段的内容.这个特色让使用者易于用 awk 编写 reform ...

  8. 【译】 AWK教程指南 2概述

    2.1 为什么用AWK 由于awk具有上述特色,在问题处理的过程中,可轻易使用awk来撰写一些小工具:这些小工具并非用来解决整个大问题,它们只扮演解决个别问题过程的某些角色,可通过Shell所提供的p ...

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

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

随机推荐

  1. bnuoj 4187 GCC (数论)

    http://www.bnuoj.com/bnuoj/problem_show.php?pid=4187 [题意]:如题 [题解]:取n,m的最小值进行遍历就可以了: 注意 0 1 这组测试数据 [c ...

  2. 常用脚本语言Perl,Python,Ruby,Javascript一 Perl,Python,Ruby,Javascript

    常用脚本语言Perl,Python,Ruby,Javascript一 Perl,Python,Ruby,Javascript Javascript现阶段还不适合用来做独立开发,它的天下还是在web应用 ...

  3. CentOS安装crontab及使用方法

    crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令.该命令从标准输入设备读取指令,并将其存放于 “crontab”文件中,以供之后读取和执行.通常,crontab储 ...

  4. DWR

    DWR(Direct Web Remoting)是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,可以帮助开发人员开发包含AJAX技术的网站.它可以允许在浏览器里的代码使用运行在 ...

  5. (转)struts2.0配置文件、常量配置详解

    一.配置: 在struts2中配置常量的方式有三种: 在struts.xml文件中配置 在web.xml文件中配置 在sturts.propreties文件中配置 1.之所以使用struts.prop ...

  6. PYTHON设计模式,创建型之工厂方法模式

    我感觉和上一个差不多,可能不要动最要的地方吧... #!/usr/bin/evn python #coding:utf8 class Pizza(object): def prepare(self, ...

  7. ECNU-2574 Principles of Compiler

    题意: 给出编译规则,求是否满足条件 A:= '(' B')'|'x'.    B:=AC.    C:={'+'A}. 其中{}表示里面的内容可以出现0次或者多次 注意点见代码注释 #include ...

  8. thinkphp多表关联并且分页

    $db_prefix = C('DB_PREFIX'); $Model = new Model(); $data = $Model->table("{$db_prefix}ordern ...

  9. Mysql一主多从和读写分离配置简记

    近期开发的系统中使用MySQL作为数据库,由于数据涉及到Money,所以不得不慎重.同时,用户对最大访问量也提出了要求.为了避免Mysql成为性能瓶颈并具备很好的容错能力,特此实现主从热备和读写分离. ...

  10. [Unity菜鸟] 摄像机视角控制

    1. 摄像机预览物体 上下左右远近 把CameraFollow脚本赋给Camera,把要观察的对象赋给target using UnityEngine; using System.Collection ...