这段awk脚本在做什么?

这段awk脚本在做什么?,awk,Awk,我正在尝试将这个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 &l

我正在尝试将这个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 " "
 }
if(substr($36,1,1)~/^[0-9]+$/){
C=36美元;
克伦=长度(36美元);
} 
否则{
C=次级卢比(36.2美元);
CLen=长度(C);
}
CPad=6-CLen;
有关(i=1;i的信息,请参见代码中的解释

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. 
 }
if(substr($36,1,1)~/^[0-9]+$/){
#substr($36,1,1)=>输入字段中的第一个字符#36
#~=>RegExp是否与
#/^[0-9]+$/=>RegExp of:由1个或多个数字组成的字符串
C=$36;#将整个输入字段#36复制到变量C
CLen=长度($36)#将输入字段的长度#36分配给变量CLen
} 
否则{
C=substr($36,2)#将输入字段#36从第二个字符复制到末尾,复制到变量C中
CLen=长度(C);#将变量C的长度分配给变量CLen
}
CPad=6-CLen;#计算CPad
有关(i=1;i的信息,请参见代码中的解释

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. 
 }
if(substr($36,1,1)~/^[0-9]+$/){
#substr($36,1,1)=>输入字段中的第一个字符#36
#~=>RegExp是否与
#/^[0-9]+$/=>RegExp of:由1个或多个数字组成的字符串
C=$36;#将整个输入字段#36复制到变量C
CLen=长度($36)#将输入字段的长度#36分配给变量CLen
} 
否则{
C=substr($36,2)#将输入字段#36从第二个字符复制到末尾,复制到变量C中
CLen=长度(C);#将变量C的长度分配给变量CLen
}
CPad=6-CLen;#计算CPad

对于(i=1;i请注意,这是substr和正则表达式匹配的无用组合

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

也可以用这个来填充6个字符

c=sprintf("%-6s",c)
总之,删除第一个字符,如果它是一个数字,右键填充到6个字符长。这样可能更容易

sub(/^[0-9]/,"",$36); c=sprintf("%-6s",$36)

请注意,这是substr和正则表达式匹配的无用组合

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

也可以用这个来填充6个字符

c=sprintf("%-6s",c)
总之,删除第一个字符,如果它是一个数字,右键填充到6个字符长。这样可能更容易

sub(/^[0-9]/,"",$36); c=sprintf("%-6s",$36)

检查
substr
在awk中的作用,rest与其他语言相当常见。第一行显示“如果字段36的第一个字符仅由数字组成”。最后一个循环是在C的末尾添加空格以填充输出。请注意,awk索引从1开始,而不是0。我将使用awk的
sprintf
而不是循环来创建一个填充。根据on,这种类型的问题天生就太宽泛,无法涉及主题,除非它们排除了所有内容,除了非常具体和狭窄的语言级别的问题……similarly,一个好的问题标题不是指“这段代码”或“这个awk脚本”,但引用了一些足够具体的内容,其他有相同问题的人会知道该问题及其答案是否有助于他们单独阅读标题。检查
substr
在awk中的作用,其余部分在其他语言中相当常见。第一行表示“如果字段36的第一个字符仅由数字组成”。最后一个循环是在C的末尾添加空格以填充输出。请注意,awk索引从1开始,而不是0。我将使用awk的
sprintf
而不是循环来创建一个填充。根据on,这种类型的问题天生就太宽泛,无法涉及主题,除非它们排除了所有内容,除了非常具体和狭窄的语言级别的问题……similarly,一个好的问题标题不是指“这段代码”或“这个awk脚本”,而是指一些足够具体的东西,让其他有同样问题的人知道这个问题及其答案是否有可能帮助他们单独阅读标题。请参见,以及“回答好的问题”第节;一般来说,在回答此类问题之前,让OP缩小问题的范围是合适的,以使问题范围足够窄,使提问者以外的人能够从答案中学习。(“在awk情况下,
~
是什么意思?”例如,某个人可能会在搜索结果列表中的问题标题中看到某个内容,并说“嘿,这就是我需要知道的!”但“这段awk脚本”会针对每个人引用不同的内容,因此它对其他人都不有用……或者,至少,实际搜索它的人不可能找到它)。请参阅的和的“回答问题”部分;通常,在回答此类问题之前,最好先让OP缩小问题范围,使问题范围足够窄,以便提问者以外的人能够从答案中学习。(“在awk情况下,
~
是什么意思?”例如,有些人可能会在搜索结果列表中的问题标题中看到,并说“嘿,这就是我需要知道的!”但“这段awk脚本”对每个人来说都是指不同的内容,因此它对其他人都没有用处……或者,至少,实际搜索它的人不可能找到它)。