проблема с элементами массива в awk не сохраняется - PullRequest
0 голосов
/ 05 августа 2009

Я использую awk для обработки почасовых данных о погоде, храня 10 массивов с 8784 элементами данных. Если массив неполный, то есть останавливается на 8250 и т. Д., После команды «END» я заполняю оставшиеся элементы массива последним доступным значением для массива. Однако, когда я затем распечатываю полные массивы, я получаю 0 для заполненных значений. Что вызывает это ?? Имеет ли awk ограничение на размер массива, который мешает заполнять массивы? Ниже приведен фрагмент программы awk. В двух операторах печати первый раз элементы массива заполнены, но второй раз они пусты.

Любая помощь приветствуется, потому что эта проблема задерживает мою работу.

Джо Хуан

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 ]

1 голос
/ 05 августа 2009

У меня нет представителя для редактирования вашего сообщения, но вот отформатированный код:

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, я должен спросить - все ли переменные определены правильно? Из этого примера мы не можем сказать, как lastpresstime, tothrs и lastpress получают их значения. В частности, если lastpress нет, вы получите именно то поведение, которое вы описали. Обратите внимание, что если вы ошиблись, это будет неопределенная переменная, поэтому используйте значение по умолчанию, равное 0.

Что касается комментария Уильяма Перселла, также не должно быть никакой разницы в выводе xipress[i] между тремя printfs (для lastpresstime<i).

0 голосов
/ 05 августа 2009

Поскольку 0 является значением по умолчанию для неизвестной / неиспользуемой числовой переменной, я хотел бы спросить, уверены ли вы, что в именах переменных, используемых в блоке END, нет неправильного типа?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...