Я не думаю, что человек спрашивает: «Как мне разбить строку и получить длину полученного массива?» Я думаю, что команда, которую они предоставляют, является лишь примером ситуации, когда она возникла. В частности, я думаю, что человек спрашивает 1) Почему длина (массив) вызывает ошибку, и 2) Как я могу получить длину массива в awk?
Ответ на первый вопрос заключается в том, что функция длины не работает с массивами в стандартном awk POSIX, хотя работает в GNU awk (gawk) и некоторых других вариантах. Ответ на второй вопрос (если мы хотим, чтобы решение работало во всех вариациях awk) выполняло линейное сканирование.
Например, такая функция:
function alen (a, i) {
for (i in a);
return i;}
ПРИМЕЧАНИЕ : Второй параметр i требует некоторого объяснения.
Способ, которым вы вводите локальные переменные в awk, - это дополнительные параметры функции, и условием является указание этого путем добавления дополнительных пробелов перед этими параметрами. Это обсуждается в руководстве GNU Awk здесь .