awk用法(二) ---程序语言特性

1 内建变量(built-in) 常用

FS   输入字段分隔符  默认空白 由选项 -F 改变 或者重新赋值FS

OFS  输出字段分隔符  默认空格,改变可以重新赋值

FILEWIDTHS   由空格隔开iade定义了每个字段的宽度,即取代FS 有字段长度来决定如何分割字段的

FNR 当前数据文件中的数据行数

NR 数据文件中的字段总数

NF 已处理的输入数据行数目

 

实例一 : FS与OFS的用法

[root@shiyan ~]# echo  "data1,date2,date3" | awk ‘BEGIN{FS=",";OFS="--"} {print $1,$2,$3}‘

data1--date2--date3

对比

[root@shiyan ~]# echo  "data1,date2,date3" | awk ‘BEGIN{FS=","} {print $1,$2,$3}‘

data1 date2 date3

 

实例二: FILEDWIDTHS 的用法

分离电话号码

[root@shiyan ~]# echo "02164300980" | gawk ‘BEGIN{FIELDWIDTHS="3 8"}{print $1, $2}‘

021 64300980

[root@shiyan ~]# echo "02164300980" | gawk ‘BEGIN{FIELDWIDTHS="3 8";OFS="-"}{print $1, $2}‘

021-64300980

 

实例三 : NF  NR  RNR 的区别

[root@shiyan ~]# echo  "data1 date2 date3" | awk ‘{print NF}‘

3

NF 好理解即处理的这条记录有多少个 字段

[root@shiyan ~]# echo  -e "data1 date2 date3\ndate4 date5" | awk ‘{print NF}‘

3

2

区别NR和FNR在于是否时多个输入文件,如果是处理一个文件则 两则意思相等

如果处理的数据文件为二个或者多个 则 FNR表示当前正在处理的文件中已经处理的记录个数

[root@shiyan ~]# awk ‘{print NR,FNR}‘ /etc/issue /etc/issue

1 1

2 2

3 3

4 1

5 2

6 3

解释  NR会将已经的记录行累加下去,不论记录行来自哪个文件,而FNR当前正在处理的文件中处理的记录

 

2 awk处理数组与遍历数组

数组变量赋值 var[index]= element ,如果未定义 则默认为空,索引值可以为任何值如 字符

[root@shiyan ~]# awk ‘BEGIN{var[1] = 3;var[2] = 4;total = var[1] + var[2];print total}‘

7

遍历数组用法  

for (var in array)

{

   statement

}

注意此处 for语句会将每次关联到数组的array的下一索引值赋给 变量var 而不是数据元素值

[root@shiyan ~]# awk ‘BEGIN{var[1] = 3;var[2] = 4; for (i in var) {print "Index:",i,"value:",var[i]} }‘

Index: 1 value: 3

Index: 2 value: 4

 

[root@shiyan ~]# awk ‘BEGIN{var["v1"] = 3;var["v2"] = 4; for (i in var) {print "Index:",i,"value:",var[i]} }‘

Index: v1 value: 3

Index: v2 value: 4

此处索引值为 字符

 

 

 

 

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。