Сценарий WLST Python не может принять переменную из сценария оболочки

Обычно вы используете предложения BEGINи ENDв awk, когда вам нужны определенные действия до и после фактической обработки файла соответственно. Таким образом, с этой логикой операторы/действия внутри них выполняются только один раз для данного входного файла.

Какие действия обычно выполняются в BEGIN?

  1. Инициализация специальных переменных для разделения строкового ввода, т. е. разделителей полей ввода и вывода FS, OFS. Хотя всегда можно определить эти специальные переменные с помощью конструкции -v FS=или определить их с помощью оператора регулярного выражения -F',', это гораздо более читабельно, когда это сделано таким образом. Из вашего примера необходимость определения { FS="," }внутри тела awkдовольно избыточна, поскольку она инициализирует переменную для каждой строки вашего входного файла. Например,. если ваша строка содержит n строк, инициализация происходит n раз.

    echo "1,2,3" | awk 'BEGIN {FS=OFS=","} {print $1}'
    
  2. Определение пользовательской строки заголовка для вывода, сгенерированного из тела сценария awk. Например,. из предыдущего примера я хотел бы распечатать заголовок, который говорит, что я распечатываю значения первого столбца

    echo "1,2,3" | awk 'BEGIN {FS=OFS=","; print "First column values only"} {print $1}'
    
  3. (Опционально -только для удобочитаемости)-Вы также можете инициализировать свои переменные, которые будут использоваться внутри тела программы. Хотя это и не рекомендуется, так как awkдинамически обрабатывает инициализацию переменных, было бы хорошо, если бы это было в BEGINдля понимания состояния переменной

    echo "1,2,3" | awk 'BEGIN {FS=OFS=","; counter = 0; } $1 == "1" { counter++ }'
    

Какие действия обычно выполняются в END?

  1. Отслеживание количества обработанных строк в теле команды awk. Одной из общих идиом может быть отслеживание количества строк в файле. Мы используем специальную awkпеременную NR, которая является текущим счетчиком, который увеличивается по мере обработки каждой строки. то есть.в первой строке значение переменной будет равно 1 и впоследствии будет увеличиваться. Но, учитывая это, как мы напечатаем общее количество строк в файле. Нельзя использовать print NRв теле файла, так как будет напечатан номер текущей строки, поскольку awkобрабатывает файл. Например. первый фрагмент ниже не будет работать. Итак, здесь появляется END, поскольку операторы внутри него получают после завершения обработки файла. Таким образом, выполнение того же вывода в ENDозначает, что мы получаем последнее значение, хранящееся в NR

    .
    printf '1\n2\n\3' | awk '{print "total="NR}'
    total=1
    total=2
    total=3
    printf '1\n2\n\3' | awk 'END{print "total="NR}'
    total=3
    
  2. Как и в случае с предложением BEGINдля вывода информации заголовка, вы можете печатать строки, информацию в виде сводки, поскольку к этому времени вся обработка вашего файла будет завершена.

Эта документация Эффективное программирование на AWK — лучший ресурс для лучшего знакомства с инструментом.

-1
23.04.2020, 11:01
1 ответ

Цитаты в

atnr.isMember('d_group','d_user',true)

проблема:

atnr.isMember(d_group,d_user,true)
0
19.03.2021, 02:27

Теги

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