2013-11-19 2 views
3

Я новичок в AWK и пытаюсь определить, пуст ли мой массив или нет, поэтому я могу распечатать сообщение, если да. Обычно я использую функции длины и могу проверить это, но, похоже, у AWK нет таких. Вот мой рабочий код, я просто хочу распечатать другое сообщение, если в массиве нет ничего после разбора всех моих данных.Как проверить, нет ли массива awk

#add to array if condition is met 
if ($2 == "SOURCE" && $4 == "RESTRICTED"){ 
    sourceAndRestricted[$3]++; 
} 
#print out array 
for (var in sourceAndRestricted){ 
    printf "\t\t"var"\n" 
} 

ive попробовал что-то вроде этого и не работал. Предложения?

for (var in sourceAndRestricted){ 
    if (var > 1){ 
     printf "\t\t"var"\n" 
    } 
    else { 
     print "NONE" 
    } 
} 
+0

Держите счетчик в течение цикла и проверить его после? –

ответ

5

Проверьте это с length() функции:

if (length(sourceAndRestricted) > 0) { 
    printf "\t\t"var"\n" 
} 
else 
    print "NONE" 
} 
+1

gawk 3.1.5 и новее только. Я не знаю о других awk: s. –

+1

@EtanReisner: Он работает для меня с '-traditional'-переключателем тоже, что теоретически делает его работающим без расширений' GNU'. – Birei

+0

не знал, была функция длины! Большое спасибо, это сработало! –

7
$ cat tst.awk 
function isEmpty(arr, idx) {for (idx in arr) return 0; return 1} 

BEGIN { 
    map[3] = 27 

    print isEmpty(map) 

    delete map[3] 

    print isEmpty(map) 
} 
$ awk -f tst.awk 
0 
1 
Смежные вопросы