То, как вести учет предыдущей операции, приводит к awk?

Ответ будет зависеть, на которой оболочке Вы используете.

Для zsh, встроенная оболочка whence -w скажет Вам точно, что Вы хотите

например.

$ whence -w whence
whence : builtin
$ whence -w man     
man : command 
4
15.04.2019, 20:41
3 ответа
[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]
3
27.01.2020, 20:58
[1185268] Звучит так, как будто в [1185754]awk[1185755] вы просто спрашиваете, как совместить несколько шаблонных выражений, используя значения переменных друг в друге - что очень просто, например, [12181]The [1185756]; [1185757] в данном случае не строго необходимо, а помогает понять. В скрипте awk (в отличие от скрипта с одним лайнером) вы, вероятно, разделите выражения на новые строки. Например, если [1185758]file[1185759] is[12183]то[12184]Также вы можете посмотреть на встроенную переменную awk [1185760]OFS[1185761] ([1185762]разделитель полей вывода[1185763]), которая позволяет вам форматировать вывод более просто e. g. учитывая [12185]затем [12186]
0
27.01.2020, 20:58
[1185264] Способ, которым я бы делал подобные вещи в скрипте awk, заключается в сохранении некоторой переменной для подсчета строк. Вы можете сделать это в одном сценарии.[12180] Вы могли бы сделать его немного более эффективным, добавив "продолжить" заявления в конце блоков для строк 2 и 3, так как вы знаете, что вы сделали.[1185267].
0
27.01.2020, 20:58

Теги

Похожие вопросы