При обработке цепочек часто оказывается удобным соединить все цепочки в массиве в одну длинную цепочку. Следующая функция, join , выполняет эту задачу. Она используется далее в нескольких прикладных программах (см. главу 16 [Практические awk-программы], стр. 205).
Важно хорошо спланировать эту функцию; она должна быть общей, но должна также иметь разумное поведение по умолчанию. Она вызывается с массивом и начальным и конечным индексами для объединяемых элементов массива. Тем самым предполагается, что индексы являются числами -- разумное предположение, поскольку массив, вероятно, создавался с split (см. раздел 12.3 [Встроенные функции для действий с цепочками], стр. 137).
# join.awk --- соединить массив в цепочку
# Arnold Robbins, arnold@gnu.org, Public Domain # May 1993
function join(array, start, end, sep, result, i) -
if (sep == "")
sep = " " else if (sep == SUBSEP) # магическое значение
sep = "" result = array[start] for (i = start + 1; i != end; i++)
result = result sep array[i] return result ""
Необязательный дополнительный аргумент есть сепаратор для использования при соединении цепочек в одну цепочку. Если в вызове указано непустое значение, то join использует его. Если такового нет, он считается пустым. В таком случае join использует один пробел как сепаратор по умолчанию. Если указанное значение равно SUBSEP, то join соединяет цепочки без сепараторов между ними. SUBSEP служит как "магическое" значение для указания того, что не должно быть никаких сепараторов между цепочками-компонентами. Было бы очень хорошо, если бы awk имел оператор присваивания для конкатенации. Отсутствие явного оператора для конкатенации делает операции над цепочками более трудными, чем они должны быть на самом деле.