[1185288] можно использовать функцию [1185766] match()[1185767] в [1185768]awk[1185769]: [12191] Мы установили разделитель записей ни на что, что позволило эффективно включить режим абзаца (разделенного пустой строкой). Вторая строка в каждом абзаце становится нашей [1185770]2 [1185771], третья строка - 3 и т.д. Мы устанавливаем выходной разделитель полей на новую строку. В связи с режимом абзаца, мы также установили разделитель выходных записей в две новые строки. На выходе появится дополнительная новая строка в конце. [12192]Мы используем функцию [1185772]match()[1185773] для определения начала числа. Когда найдено совпадение, функция заполняет для нас две переменные, [1185774]RSTART[1185775] и [1185776]RLENGTH[1185777], указывая, когда начинается совпадение и как долго оно длится. Мы используем эти переменные для нашего вычисления и сохраняем результат в переменной под названием [1185778] value[1185779]. Мы используем подложку [1185780] [1185781] для нахождения чисел. [12193] Мы повторяем то же самое для [1185782]3 [1185783], и на этот раз мы используем функцию подложки [1185784], чтобы распечатать до того места, где начинаются наши числа, и заменить числовую часть нашей переменной, которая содержит вычисленное значение из предыдущей строки. [12194]Пожалуйста, обратитесь к [1185786]String Functions[1185787] в руководстве пользователя для получения более подробной информации. [12195]Обновление на основе реальных данных:[12196]Ваши реальные данные на самом деле делают это намного проще. [12197]Вы ищете строку с [1185788]uidNumber[1185789] и захватываете последнее поле. Когда вы видите строку с [1185790]sambaSID[1185791], вы разделяете последнее поле на [1185792]-[1185793] и изменяете последний элемент на ваше новое вычисленное значение. Затем с помощью [1185794]-[1185793] в цикле [1185795] Вы повторно соберете последнее поле. [1185306]
27.01.2020, 20:58
Ссылка