awk中的数组元素没有被存储的问题

时间:2009-08-05 10:38:28

标签: arrays awk

我一直在使用awk来处理每小时的天气数据,存储10个阵列,其中包含多达8784个数据元素。如果数组不完整,即在8250等处停止,则在“END”命令之后,我用数组的最后一个可用值填充剩余的数组元素。但是,当我打印出完整的数组时,我得到填充值的0。是什么导致了这个? awk是否有数组大小限制阻止它填充数组?以下是awk程序的片段。在两个print语句中,第一次填充数组元素,但第二次它们是空的。

感谢任何帮助,因为这个问题阻碍了我的工作。

Joe Huang

END{
if (lastpresstime < tothrs)
   {
   diffhr = tothrs - lastpresstime
   for (i=lastpresstime+1;i<=tothrs+1;i++)
      {
      xpressinter[i]=diffhr
      xpressrecords[i]=diffhr
      xipress[i]=lastpress
      xpressflag[i]="R"
      printf("PRS xipress[%4d] =%6.1f\n",i,xipress[i]) > "ncdcfm3.prs"
      printf(" xipress[%4d] =%6.1f%1s\n",i,xipress[i],xpressflag[i])
      }
   for (i=1;i<=tothrs+1;i++) printf("PRS xipress[%4d] =%6.1f\n",i,xipress[i]) 
   }

2 个答案:

答案 0 :(得分:1)

我没有代表编辑您的帖子,但这是格式化的代码:

END {
    if (lastpresstime < tothrs) {
        diffhr = tothrs - lastpresstime
        for (i=lastpresstime+1;i<=tothrs+1;i++) {
            xpressinter[i]=diffhr
            xpressrecords[i]=diffhr
            xipress[i]=lastpress
            xpressflag[i]="R"
            printf("PRS xipress[%4d] =%6.1f\n",i,xipress[i]) > "ncdcfm3.prs"
            printf(" xipress[%4d] =%6.1f%1s\n",i,xipress[i],xpressflag[i])
        }
        for (i=1;i<=tothrs+1;i++)
            printf("PRS xipress[%4d] =%6.1f\n",i,xipress[i])
    }
}

请注意,我在最后添加了一个匹配的大括号。

我没有看到代码中存在任何固有问题,所以像jhartelt一样,我不得不问 - 是否正确定义了所有变量?我们无法从此示例中了解lastpresstimetothrslastpress如何获取其值。特别是,如果lastpress不是,您将完全得到您描述的行为。请注意,如果拼写错误,它将是一个未定义的变量,因此使用默认值0。

关于William Pursell的评论,三个printfs(xipress[i])之间的lastpresstime<i输出也应该没有区别。

答案 1 :(得分:0)

由于0是未知/未使用的数值变量的默认值,我会问你是否确定END块中使用的变量名中没有错误类型?