awk 数组实例(转)
2013-01-23 14:03
274 查看
awk 数组实例
awk的数组,一种关联数组(Associative Arrays),下标可以是数字和字符串。因无需对数组名和元素提前声明,也无需指定元素个数 ,所以awk的数组使用非常灵活。
首先介绍下几个awk数组相关的知识点:
<1>建立数组
array[index] = value :数组名array,下标index以及相应的值value。
<2>读取数组值
{ for (item in array) print array[item]} # 输出的顺序是随机的
{for(i=1;i<=len;i++) print array[i]} # Len 是数组的长度
<3>多维数组,array[index1,index2,……]:SUBSEP是数组下标分割符,默认为“\034”。可以事先设定SUBSEP,也可以直接在SUBSEP的位置输入你要用的分隔符,如:
awk 'BEGIN{SUBSEP=":";array["a","b"]=1;for(i in array) print i}'
a:b
awk 'BEGIN{array["a"":""b"]=1;for(i in array) print i}'
a:b
但,有些特殊情况需要避免,如:
awk 'BEGIN{
SUBSEP=":"
array["a","b:c"]=1 # 下标为“a:b:c”
array["a:b","c"]=2 #下标同样是“a:b:c”
for (i in array) print i,array[i]}'
a:b:c 2 #所以数组元素只有一个。
<4>删除数组或数组元素: 使用delete 函数
delete array #删除整个数组
delete array[item] # 删除某个数组元素(item)
<5> 排序:awk中的asort函数可以实现对数组的值进行排序,不过排序之后的数组下标改为从1到数组的长度。在gawk 3.1.2以后的版本还提供了一个asorti函数,这个函数不是依据关联数组的值,而是依据关联数组的下标排序,即asorti(array)以后,仍会用数字(1到数组长度)来作为下标,但是array的数组值变为排序后的原来的下标,除非你指定另一个参数如:asorti(a,b)。(非常感谢lionfun对asorti的指正和补充)
cat test
2 d
3 t
6 a
8 b
g u
m c
0 d
5 e
awk '{a[$1]=$2;}END{len=asorti(a); for(i=1;i<=len;i++) print i,a[i]}' test
1 0
2 2
3 3
4 5
5 6
6 8
7 g
8 m
awk '{a[$1]=$2;}END{len=asorti(a,b); for(i=1;i<=len;i++) print i,b[i],a[b[i]]}' test #利用asort函数对数组a的值排序,同时获得数组长度len
1 0 d
2 2 d
3 3 t
4 5 e
5 6 a
6 8 b
7 g u
8 m c
原文:
http://www.51testing.com/?uid-363787-action-viewspace-itemid-242169
awk的数组,一种关联数组(Associative Arrays),下标可以是数字和字符串。因无需对数组名和元素提前声明,也无需指定元素个数 ,所以awk的数组使用非常灵活。
首先介绍下几个awk数组相关的知识点:
<1>建立数组
array[index] = value :数组名array,下标index以及相应的值value。
<2>读取数组值
{ for (item in array) print array[item]} # 输出的顺序是随机的
{for(i=1;i<=len;i++) print array[i]} # Len 是数组的长度
<3>多维数组,array[index1,index2,……]:SUBSEP是数组下标分割符,默认为“\034”。可以事先设定SUBSEP,也可以直接在SUBSEP的位置输入你要用的分隔符,如:
awk 'BEGIN{SUBSEP=":";array["a","b"]=1;for(i in array) print i}'
a:b
awk 'BEGIN{array["a"":""b"]=1;for(i in array) print i}'
a:b
但,有些特殊情况需要避免,如:
awk 'BEGIN{
SUBSEP=":"
array["a","b:c"]=1 # 下标为“a:b:c”
array["a:b","c"]=2 #下标同样是“a:b:c”
for (i in array) print i,array[i]}'
a:b:c 2 #所以数组元素只有一个。
<4>删除数组或数组元素: 使用delete 函数
delete array #删除整个数组
delete array[item] # 删除某个数组元素(item)
<5> 排序:awk中的asort函数可以实现对数组的值进行排序,不过排序之后的数组下标改为从1到数组的长度。在gawk 3.1.2以后的版本还提供了一个asorti函数,这个函数不是依据关联数组的值,而是依据关联数组的下标排序,即asorti(array)以后,仍会用数字(1到数组长度)来作为下标,但是array的数组值变为排序后的原来的下标,除非你指定另一个参数如:asorti(a,b)。(非常感谢lionfun对asorti的指正和补充)
cat test
2 d
3 t
6 a
8 b
g u
m c
0 d
5 e
awk '{a[$1]=$2;}END{len=asorti(a); for(i=1;i<=len;i++) print i,a[i]}' test
1 0
2 2
3 3
4 5
5 6
6 8
7 g
8 m
awk '{a[$1]=$2;}END{len=asorti(a,b); for(i=1;i<=len;i++) print i,b[i],a[b[i]]}' test #利用asort函数对数组a的值排序,同时获得数组长度len
1 0 d
2 2 d
3 3 t
4 5 e
5 6 a
6 8 b
7 g u
8 m c
原文:
http://www.51testing.com/?uid-363787-action-viewspace-itemid-242169
相关文章推荐
- awk 数组实例
- awk中数组的运用实例
- Yii基于数组和对象的Model查询技巧实例详解
- PHP中数组的分组排序实例
- php array_values 返回数组的所有值详解及实例
- javascript中Array数组的迭代方法实例分析
- awk里面的数组很好用
- awk 数组
- shell (awk)数组使用案例
- PHP实现对数组分页处理实例详解
- [awk] 用-F指定多分隔符实例_备忘
- C#中数组、ArrayList和List三者的区别详解及实例
- php获取数组长度的方法+实例
- C#中实例一个自定义类的数组的做法
- PHP 将数组打乱 shuffle函数的用法及简单实例
- js数组去重及mybatis foreach简单实例
- javascript中数组的定义及使用实例
- 数组指针和指针数组实例辨析
- 用JS编写一个函数,返回数组中重复出现过的元素(实例)
- awk初中高级应用实例