awk内置变量的应用

现在我们来看一些例子,它们以变量NR开头。将前面计算平均成绩的脚本中的print语句修改为:

$ cat grades

john 85 92 78 94 88

andrea 89 90 75 90 86

jasper 84 88 80 92 84

$ cat grades.awk

#求5个成绩的平均值

{ total = $2 + $3 + $4 + $5 + $6

avg = total / 5

print NR ".", $1 , avg }

运行修改过的脚本输出如下结果:

$ awk -f grades.awk grades

1. john 87.4

2. andrea 86

3. jasper 85.6

当读入最后一行后, NR的值是读入的输入记录的个数。它可用于END过程中来产生总结报告。下面是phonelist.awk脚本修改过的版本。

$ cat names

John Robinson, Koren Inc.,978 4th
Ave.,Boston,MA
01760,696-0987

Phyllis Chapman, GVE Corp.,34 Sea
Drive, Amesbury,MA
01881,879-0900

$ cat phonelist.awk

# phonelist.awk -打印名字和电话号码。

#输入文件一一名字、公司、街道、城市、州和邮编、电话

BEGIN { FS = ",
*" } #用逗号分隔字段

{ print $1 ",
" $6 }

END { print ""

print NR, "records
processed. " }

这个程序修改了默认的字段分隔符,并使用NR打印记录的总数。注意,这个程序使用了一个正则表达式。程序执行的输出结果如下:

$ awk -F, -f phonelist.awk
names

John Robinson, 696-0987

Phyllis Chapman, 879-0900

2 records processed.

当在print语句中用逗号分隔参数时,将产生输出字段分隔符(OFS)。你或许会对下面的表达式中逗号将起什么作用产生疑问:

print NR ".", $1 , avg

默认情况下,逗号将在输出中产生一个空格(OFS的默认值)。例如,你可以使用BEGIN过程将OFS重定义为制表符。那么前面的print 语句将产生如下输出:

$ awk -f grades.awk grades

1.  john    87.4

2.  andrea  86

3.  jasper  85.6

如果输入字段由制表符分隔,并且希望产生相同的输出时,这种方法特别有用。OFS可以重定义为一系列字符,例如逗号后面跟一个空格。

另一个常用的系统变量是NF,它的值被设置为当前记录的字段个数。就像我们将在下一部分看到的那样,可以用NF来测试一个记录的字段个数是否与所期望的相同。也可以用NF来引用每个记录的最后一个字段。使用"$"字段操作符和NF可以实现该引用。如果有6个字段,那么"$NF"与"$6"一样。

参考资料:http://www.linuxawk.com/communication/494.html

时间: 2024-10-25 00:28:58

awk内置变量的应用的相关文章

Linux基础教程 linux awk内置变量使用介绍

awk是个优秀文本处理工具,可以说是一门程序设计语言.下面是兄弟连Linux培训 给大家介绍的awk内置变量. 一.内置变量表 属性 说明 $0 当前记录(作为单个变量) $1~$n 当前记录的第n个字段,字段间由FS分隔 FS 输入字段分隔符 默认是空格 NF 当前记录中的字段个数,就是有多少列 NR 已经读出的记录数,就是行号,从1开始 RS 输入的记录他隔符默 认为换行符 OFS 输出字段分隔符 默认也是空格 ORS 输出的记录分隔符,默认为换行符 ARGC 命令行参数个数 ARGV 命令

shell文本过滤编程(四):awk内置变量及一般变量

[版权声明:转载请保留出处:blog.csdn.net/gentleliu.Mail:shallnew at 163 dot com] awk有许多内置变量用来设置环境信息.这些变量可以被改变.下面是awk内置变量: ARGC 命令行参数个数 ARGV 命令行参数排列 ENVIRON 支持队列中系统环境变量的使用 FILENAME  a w k浏览的文件名 FNR 浏览文件的记录数 FS 设置输入域分隔符,等价于命令行 - F选项 NF 浏览记录的域个数 NR 已读的记录数 OFS 输出域分隔符

awk内置变量 awk有许多内置变量用来设置环境信息,这些变量可以被改变,下面给出了最常用的一些变量。

ARGC 命令行参数个数 ARGV 命令行参数排列 ENVIRON 支持队列中系统环境变量的使用 FILENAME awk浏览的文件名 FNR 浏览文件的记录数 FS 设置输入域分隔符,等价于命令行 -F选项 NF 浏览记录的域的个数 NR 已读的记录数 OFS 输出域分隔符 ORS 输出记录分隔符 RS 控制记录分隔符 此外,$0变量是指整条记录.$1表示当前行的第一个域,$2表示当前行的第二个域,......以此类推. 统计/etc/passwd:文件名,每行的行号,每行的列数,对应的完整行

AWK内置变量

$0 当前记录(作为单个变量) $1~$n 当前记录的第n个字段,字段间由FS分隔 FS 输入字段分隔符 默认是空格 NF 当前记录中的字段个数,就是有多少列 NR 已经读出的记录数,就是行号,从1开始 RS 输入的记录他隔符默 认为换行符 OFS 输出字段分隔符 默认也是空格 ORS 输出的记录分隔符,默认为换行符 ARGC 命令行参数个数 ARGV 命令行参数数组 FILENAME 当前输入文件的名字 IGNORECASE 如果为真,则进行忽略大小写的匹配 ARGIND 当前被处理文件的AR

awk 内置变量

FS 设置输入域分隔符,等价于命令行 -F选项 OFS 输出域分隔符 NF 浏览记录的域的个数NR 已读的记录数 RS 控制记录分隔符 ORS 输出记录分隔符 实例: 1. FS设置域分隔符 等于-F. 过滤出了/etc/passwd 文件中的第一列 [[email protected] ~]# awk 'BEGIN{FS=":"}{print $1}' /etc/passwdrootbindaemonadmlpsync 2.OFS 输出域分隔符. 我们可以改变文件内容的分割符号,并且

Linux高级文本处理之gawk内置变量(一)

一.FS –输入字段分隔符 FS是awk内置变量,用来制定行分隔符,功能能-F一样,区别在于FS只能用在BEGIN语句块当中,命令格式如下: BEGIN{FS="SEPARATOR"} 实例1: [[email protected] ~]# awk 'BEGIN { FS=","; print "---------------------------\nName\tTitle\n------------------------"} {print 

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

因内置变量的个数不多,此处按其相关性分类说明,并未按其字母顺序排列. ARGC ARGC表示命令行上除了选项 -F, -v, -f 及其所对应的参数之外的所有参数的个数.若将"awk程序"直接写在命令列上,则 ARGC 亦不将该"程序部分"列入计算. ARGV ARGV数组用以记录命令列上的参数. 例:执行下列命令 $ awk -F\t -v a=8 -f prg.awk file1.dat file2.dat 或 $ awk -F\t -v a=8 '{ prin

awk学习之理解内置变量

ENVIRON:使用这个内置变量可以查看当前系统下的环境变量,例如BEGIN  {print ENVIRON["HOME"]}. FILENAME:当前正被处理的文件名 例END {print FILENAME}. NF:被处理的文件每行(每一行称为一个记录),分成了几个域(列),$0表示整个记录,每个域被标记为$1,$2......$n. NR:用在block中间段时,标志正被处理的记录序号(行号),用在END区域时,代表输入文件的总记录. FNR:当处理多个文件时,NR值会持续增加

linux awk 内置函数详细介绍(实例)

这节详细介绍awk内置函数,主要分以下3种类似:算数函数.字符串函数.其它一般函数.时间函数 一.算术函数: 以下算术函数执行与 C 语言中名称相同的子例程相同的操作: 函数名 说明 atan2( y, x ) 返回 y/x 的反正切. cos( x ) 返回 x 的余弦:x 是弧度. sin( x ) 返回 x 的正弦:x 是弧度. exp( x ) 返回 x 幂函数. log( x ) 返回 x 的自然对数. sqrt( x ) 返回 x 平方根. int( x ) 返回 x 的截断至整数的