首页 > 代码库 > awk用法(二) ---程序语言特性
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
此处索引值为 字符
awk用法(二) ---程序语言特性