如果条件表现异常,则使用awk进行条件检查

如果条件表现异常,则使用awk进行条件检查,awk,Awk,我使用awk在cshel工作。我有一个问题,它没有返回我的预期输出,如果条件不是表现良好,有时但表现良好的其他时间,需要了解 echo "m='12*mfactor'" | awk '{a="";a2=""; for(i=1;i<=NF;i++) {if($i~/mfactor/) {a=substr($i,3,3); gsub("*", "",a); gsub("\047", "",a); }}; for(i=1;i<=NF;i++) {if($i~/mfactor/&&a

我使用awk在cshel工作。我有一个问题,它没有返回我的预期输出,如果条件不是表现良好,有时但表现良好的其他时间,需要了解

echo "m='12*mfactor'" | awk '{a="";a2=""; for(i=1;i<=NF;i++) {if($i~/mfactor/) {a=substr($i,3,3); gsub("*", "",a); gsub("\047", "",a); }}; for(i=1;i<=NF;i++) {if($i~/mfactor/&&a~/^[0-9]/&&a>1) {gsub("m=\047","m=\047"a1,$i); for(a2=1;a2<=a;a2++) {print a2","a};if(a2>a) {print a2" is greater than "a};}};  }'

echo“m='12*mfactor'”awk'{a=”“;a2=“”;for(i=1;i您遇到的问题是您正在进行字符串比较
a21){

对于(a2=1;a2预期的输出是什么?当我放置m='12*mfactor'时,我希望它在退出之前迭代12次,但它只迭代一次并退出,而当我给出m='4*mfactor'时。它正确地迭代了4次,所以我需要理解为什么sasme代码在第一种情况下无法工作。如果您的整个awk脚本都不可用,我们会发现更容易帮助您不要挤在一行上,使它无法阅读。
echo "m='4*mfactor'" | awk '{a="";a2=""; for(i=1;i<=NF;i++) {if($i~/mfactor/) {a=substr($i,3,3); gsub("*", "",a); gsub("\047", "",a); }}; for(i=1;i<=NF;i++) {if($i~/mfactor/&&a~/^[0-9]/&&a>1) {gsub("m=\047","m=\047"a1,$i); for(a2=1;a2<=a;a2++) {print a2","a};if(a2>a) {print a2" is greater than "a};}};  }'
#!/usr/bin/awk -f

{
# no need to initialise a and a2 here
# combine the loops
    for(i=1;i<=NF;i++) {
        if($i~/mfactor/) {
# combine two gsubs - see below for potentially better alternative
            a=substr($i,3,3)
# instead of \047 use '\''
            gsub("[*'\'']", "",a)
            if(a~/^[0-9]/&&a>1) {
# a1 isn't initialised, what you were trying to do here?
# gsub("m=\047","m=\047"a1,$i)
# convert a to a number using unary plus
                a = +a              
                for(a2=1;a2<=a;a2++) {
                    print a2","a
                }
# no need for "if" as the loop has already ended
                print a2" is greater than "a
            }
        }
    }
}
split($i, b, /[*\047]/)
a = +b[2]
echo "m='4*mfactor'" | awk '
{ 
    for(i=1;i<=NF;i++) { 
        if($i~/mfactor/) { 
            split($i, b, /[*'\'']/); a = +b[2]
            if(a~/^[0-9]/&&a>1) { 
                for(a2=1;a2<=a;a2++) { print a2","a } 
                print a2" is greater than "a 
            } 
        } 
    } 
}'
1,4
2,4
3,4
4,4
5 is greater than 4
echo "m='12*mfactor'" | awk '
{ 
    for(i=1;i<=NF;i++) { 
        if($i~/mfactor/) { 
            split($i, b, /[*'\'']/); a = +b[2]
            if(a~/^[0-9]/&&a>1) { 
                for(a2=1;a2<=a;a2++) { print a2","a } 
                print a2" is greater than "a 
            } 
        } 
    } 
}'
1,12
2,12
3,12
4,12
5,12
6,12
7,12
8,12
9,12
10,12
11,12
12,12
13 is greater than 12