Доступ к openvpn из скрипта без сохранения пароля в файле

Вы можете автоматизировать и обобщить обработку входного файла, чтобы разрешить любые имена атрибутов и любое количество имен атрибутов, а не только девять, показанные в OP:

   "subject code"
   "date of birth"
   "favorite activities"
   "height (m)"
   "weight (lbs)"
   "test score + standard deviation"
   "color blind"
   "number of siblings"
   "average score"

Один из способов сделать это с помощью awk:

awk -v i=0 -v nAtt=9 '
    /table columns are:/ {i+=1;ii=nAtt*(i-1);next} 
    !/(^$|^[0-9]+ +([0-9]+\.*[0-9]+ +)*.+)/ {ii+=1;a[ii]=$0}
    /^[0-9]+ +([0-9]+\.*[0-9]+ +)*.+/ 
        {printf "\n%s\n", $(nAtt+1);
        c=0; 
        for(ii-=nAtt;ii++<1+(nAtt-1)*i;) {c++;printf "%-34s%s\n",a[ii],$c}}
                    ' file.txt

Пояснение:

  • в этом awk one -вкладыше есть три раздела, все они начинаются с сопоставления с образцом, как /.../, или против сопоставления -, как!/.../
  • но сначала при вызове awkя передаю в него две внешние переменные с опцией -v:i=0и nAtt=9. iпредставляет собой ранг блока данных (, т. е. порядковый номер блока атрибутов во входном файле :file.txt), а nAtt— количество атрибутов, которое в этом решении должно быть одинаковым для всех данных. блокировать.
  • 1-е сопоставление с шаблоном :каждый раз, когда awkвидит шаблон table columns are:, он понимает, что новый блок данных начинается со следующей записи, устанавливает два счетчика iи iiи переходит к следующему записывать.
  • 2-е сопоставление с шаблоном :, если считываемая запись не является ни пустой строкой, ни строкой, которая может соответствовать чему-то вроде :56 6.18 1307 5.73 167 0.564 2 3 1.7 subject_8293748/label/NMA.label, затем увеличивайте счетчик массива aiiи начинайте заполнять массив строками имен атрибутов, пока не достигнете...
  • 3-е сопоставление с шаблоном :если запись соответствует 56 6.18 1307 5.73 167 0.564 2 3 1.7, за которой следует любое количество символов, напечатать (nAtt+1)-е поле в этой записи, затем напечатать nAttимена и значения атрибутов, по одному в каждой строке, таким образом, чтобы имена атрибутов выравнивались по левому краю и усекались, если их длина превышала 34 символа.

Как упоминалось ранее:

  • Это будет работать для любого количества атрибутов (nAtt )в блоке атрибутов и для имен атрибутов, которые (или не различаются )от блока к блоку.
  • не -постоянное количество атрибутов в блоке возможно (и легко ), с небольшими изменениями сценария.
  • внешние переменные могут быть переданы в awk, например, с помощью:

    awk -v i=$i -v nAtt=$nAtt '...'

0
17.09.2019, 15:07
0 ответов

Теги

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