Что делает этот кусок awk-скрипта? - PullRequest
0 голосов
/ 22 июня 2019

Я пытаюсь преобразовать этот awkscript в python, и вот этот фрагмент с синтаксисом, с которым я незнаком. Я знаю, что после инструкции else настраивается заполнение пробела для вывода в файл, но if / else сбивает меня с толку.

if (substr($36,1,1) ~ /^[0-9]+$/) {
   C = $36;
   CLen = length($36);
 } 
 else {
   C = substr($36,2);
   CLen = length(C);
 }
 CPad  = 6 - CLen;
 for (i = 1; i <= CPad; ++i) {
     C = C " "
 }

Ответы [ 2 ]

1 голос
/ 22 июня 2019

См. # объяснения в коде.

if (substr($36,1,1) ~ /^[0-9]+$/) {
   # substr($36,1,1) => first char in input field #36
   # ~ => is RegExp match to
   # /^[0-9]+$/ => RegExp of : string consisting of 1 or more digits
   C = $36; # Copy whole input field #36 to variable C
   CLen = length($36); # Assign lenght of input field #36 to variable CLen
 } 
 else { 
   C = substr($36,2); # Copy input field #36 from second char to end, into to variable C
   CLen = length(C); # Assign length of variable C to variable CLen
 }
 CPad  = 6 - CLen; # Compute CPad
 for (i = 1; i <= CPad; ++i) {
     C = C " " # pad CPad spaces to C right side. 
 }

Удачи.

0 голосов
/ 22 июня 2019

обратите внимание, что это бесполезная комбинация совпадений с подстрокой и регулярным выражением

substr($36,1,1) ~ /^[0-9]+$/

это эквивалентно $36 ~ /^[0-9]/

с этим также можно сделать правое заполнение до 6 символов

c=sprintf("%-6s",c)

В итоге, удалите первый символ, если это цифра, правая панель длиной до 6 символов.Возможно, так проще ...

sub(/^[0-9]/,"",$36); c=sprintf("%-6s",$36)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...