"&安培;&安培;"在awk" for"声明

时间:2015-05-13 03:33:09

标签: shell awk

awk -F'\t' 'BEGIN{OFS="\t"}
            {x[NR]=$1;y[NR]=$2}
            END{
                for(m=1;m<=NR;m++){
                    for(n=m+1;n<=NR && x[m] == x[n];n++){
                        print NR,m,n,x[m],x[n],y[m],y[n] >> "tmp"
                    }
                }
            }' all_lemma10

awk -F'\t' 'BEGIN{OFS="\t"}
            {x[NR]=$1;y[NR]=$2}
            END{
                for(m=1;m<=NR;m++){
                    for(n=m+1;n<=NR;n++){
                        if (x[m]==x[n]){
                            print NR,m,n,x[m],x[n],y[m],y[n] >> "tmp"
                        }
                    }
                }
            }' all_lemma10

我对这两个awk很困惑。我认为他们应该得出相同的结果。但事实并非如此。请帮帮我。

1 个答案:

答案 0 :(得分:2)

在不尝试理解令人费解的细节的情况下,让我试着解释为什么这两种形式在一般中不相同:

for(n=m+1; n<=NR && x[m] == x[n]; n++) 

可能 n > NR之前停止迭代,即只要条件x[m] == x[n]评估为false。

相比之下,

for(n=m+1; n<=NR; n++) {if (x[m] == x[n]) ... }

总是迭代直到n > NR,并根据x[m] == x[n]是否为真来对是否给定迭代进行操作。