awk使用笔记:多维数组(带例子)

来源:互联网 发布:chrome windows 2003 编辑:程序博客网 时间:2024/06/14 08:12

http://sparkandshine.net/awk-use-notes-multidimensional-arrays-with-examples/转自:


awk通过将下标整体看成一个字符串来支持多维数组。本文结合例子介绍awk多维数组的赋值及遍历。

目录 [hide]

  • 1. 多维数组
  • 2. 数组赋值
  • 3. 遍历数组
    • 3.1 分割字符串split
  • 4. 其他

1. 多维数组

awk通过将下标整体看成一个字符串来支持多维数组,实际上是一维数组,如array[5,6]=7,下标5和6连结成字符串5SUBSEP6(数字5和6被视为字符串),SUBSEP是awk内建的一个变量,默认值是\034(文件分隔符file separator),可见,awk可以支持任意维的数组。

2. 数组赋值

awk变量无须定义,可直接赋值,举例如下:

  1. # name ID score
  2. array["Jelline", "201021060111"] = 100
  3. array["SparkandShine", "201021060118"] = 150

3. 遍历数组

由上面分析可知,awk多维数组本质上是一维数组,比较特殊的是多个下标用特殊字符SUBSEP连结成一个字符串,用split可以将下标分隔开。遍历多维数组源代码如下:

  1. # 打印数组
  2. for (subscript in array) {
  3. split(subscript, a, SUBSEP);
  4. printf "%s\t%s\t%s\n", a[1], a[2], array[a[1], a[2]]
  5. }
  6.  
  7. # 输出结果如下:
  8. SparkandShine 201021060118 150
  9. Jelline 201021060111 100
  10.  
  11. # 对于数值,还可以这样遍历
  12. for (i=0; i<M; i++) {
  13. for (j=0; j<N; j++) {
  14. print array[i, j]
  15. }
  16. }

3.1 分割字符串split

函数split用法如下:

  1. split(string, array [, fieldsep [, seps ] ])

将string按fieldsep分割存储在array[1], array[2], ..., 并将分隔符依次存储在seps[1], sep[2], ..., 最后返回被分割的数目。举例如下:

  1. split("cul-de-sac", a, "-", seps)
  2.  
  3. a[1] = "cul"
  4. a[2] = "de"
  5. a[3] = "sac"
  6.  
  7. seps[1] = "-"
  8. seps[2] = "-"
  9.  
  10. 函数返回值为3

4. 其他

可以通过以下方法判断一个数组是否存在指定的下标,用于if语句,如下:

  1. (subscript1, subscript2, …) in array

参考资料:
[1]官方文档《8.5 Multidimensional Arrays》
[2]官方文档《String-Manipulation Functions》


原创粉丝点击