awk
Массивы
Поиск…
Основы массива
Создание нового массива несколько запутанно, так как нет реального идентификатора для массива в awk. Таким образом, массив не может быть инициализирован с помощью нашего AWK-кода.
Массив в awk является ассоциативным, что означает, что любая строка или число могут быть ключом. Это означает, что массив больше похож на словарь пар ключ-значение, карту и т. Д. С другой стороны, массивы не имеют максимального размера.
Создание массива в AWK очень просто, поскольку вы берете имя переменной, правильный ключ и назначаете его переменной. Это означает, что когда выполняется следующий код, мы уже создали массив с именем myArray :
BEGIN {
myArray["key"] = "value"
}
Мы не обязаны создавать массивы только в начале. Допустим, у нас есть следующий поток ввода:
A b c
D e f
G h i
И выполните следующий код с этим:
{
myOtherArray[$1] = $2 "-" $3
}
# The array will look like this:
# myOtherArray["A"] = "b-c"
# myOtherArray["D"] = "e-f"
# myOtherArray["G"] = "h-i"
Когда массив заполняется парами значений ключа, можно получить значение только с помощью ключа. Это означает, что если мы используем ключ "A" в myOtherArray мы получаем "bc" .
END {
print(myOtherArray["A"])
}
У нас также есть возможность прокручивать каждую клавишу, чтобы получить каждое значение. Проникновение через каждый ключ массива - это простая вещь, но она имеет дело с падением: она несортирована. Следующий цикл похож на цикл for-each, который извлекает ключ:
END {
for (key in myOtherArray) {
print "myOtherArray[\"" key "\"] = " myOtherArray[key]
}
}
# Outputs (literal strings):
myOtherArray["A"] = "b-c"
myOtherArray["D"] = "e-f"
myOtherArray["G"] = "h-i"