URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 8468
[ Назад ]

Исходное сообщение
"awk и многомерные массивы"

Отправлено Владимир , 08-Окт-09 11:10 
Что-то как-то непонятно. Есть простенькая программка на awk:

{
m[1]=$1;
m[2]=$2;
}
END { for ( i in m ) print m[i] }

Если на вход дать, например, пару цифр на выходе получим ту же пару.
Пытаюсь сделать все то же самое, но с двумерным массивом:

{
m[1,1]=$1;
m[2,1]=$2;
}
END { for ( (i,j) in m ) print m[i,j] }

лепит ошибку:

awk: syntax error at source line 5
context is
        END { for ( (i,j) in m >>>  ) <<<
awk: illegal statement at source line 5


Содержание

Сообщения в этом обсуждении
"awk и многомерные массивы"
Отправлено Andrey Mitrofanov , 08-Окт-09 11:52 
>Что-то как-то непонятно.
>лепит ошибку:
>awk:

man gawk
man awk

в районе "arrays"...

Так понятнее, _кто_ "лепит" ошибку?


"awk и многомерные массивы"
Отправлено Andrey Mitrofanov , 08-Окт-09 12:04 
>man gawk
>в районе "arrays"...
>Так понятнее, _кто_ "лепит" ошибку?

Упс. Сам такой, прошу прощения.

Многомерных-то массивов нет, но конструкция "(i,j) in arr" есть... Но судя по контексту ман-а и тому, что так не работате -- она реализована только для if(), но не для for(), грубо выражаясь.

Вот так работает:

#!/usr/bin/gawk -f

BEGIN {
SUBSEP=","
m[1,1]=111;
m[2,1]=222;

for ( s in m ) print i" "m[s];

for ( s in m ) {
  match(s, /(.+),(.+)/, ar);
  i=ar[1]; j=ar[2]
  print i" "j" "m[i,j];
  }
}


"awk и многомерные массивы"
Отправлено Pahanivo , 08-Окт-09 13:31 
кончаем извращатся и переходим на перл!