awk的内置系统变量

awk中有许多系统变量或内置变量。

这里分两种:
  --可以改变的系统变量(比如默认的字段和记录分隔符)
  --不可以改变的,由awk系统自己更新的变量(当前记录的编号和输入文件名)

FS: 字段分隔符,默认值是一个空格
NF:当前输入记录的字段个数
RS:定义为一个换行符
NR:定义为输入的行数

ORS:与RS等效的输出,默认也是一个换行符

OFS:与FS等效的输出,默认值也是一个空格


·现在举例说明:
--定义一个marks.txt文件,内容如下:
john 85 92 78 94 88
andrea 89 90 75 90 86
jasper 84 88 80 92 84

--使用awk命令:
[root@CentOS awk_test]# awk '{ total=$2+$3+$4+$5+$6; avg=total/5; print NF,"\t" NR ".",$1,total/5 RS }' marks.txt
 

计算平均值并且打印,结果如下:
6        1. john 87.4

6       2. andrea 86

6       3. jasper 85.6


两个重点数字解析:
6 ==》 即为 NF的值,上面已说过 NF表示当前输入记录的字段个数,拿第一行来说:
       john 85 92 78 94 88,以空格为分隔符,这里一共有6个字段,所以NF值为6.

1 ==》 即为NR的值,NR表示输入的行数,相当于一个变量,处理一行时增加1,所以等到awk命令处理完,可以        用 END{print NR} 来显示一共有多少行输出。

如果我把命令改一下,使用下面的命令:
[root@CentOS awk_test]# awk 'BEGIN { OFS="****" } { total=$2+$3+$4+$5+$6; avg=total/5; print NF,"\t" NR ".",$1,total/5 RS }' marks.txt
 

即把OFS=“****”,则会发生如下情况:
6****    1.****john****87.4

6****    2.****andrea****86

6****    3.****jasper****85.6

之前的 , 符号本来是一个空格(OFS的默认值),这里已经变成了 **** 。
同理,ORS也一样可以改变。


========================== 全文完 =====================

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值