NF> 0在UNiX编程环境中检查了两次

时间:2012-07-07 13:02:19

标签: unix awk

我正在阅读UNIX编程环境,在4.4节中,关于awk,有以下示例代码:

    awk '
    FILENAME != prevfile {   # new file
        NR = 1               # reset line number
        prevfile = FILENAME
    }
    NF > 0 {
        if ($1 == lastword)
            printf "double %s, file %s, line %d\n",$1,FILENAME,NR
        for (i = 2; i <= NF; i++)
            if ($i == $(i-1))
                printf "double %s, file %s, line %d\n",$i,FILENAME,NR
        if (NF > 0)
            lastword = $NF
    }' $*

为什么是NF&gt;在已经具有NF&gt;的块内测试0。 0作为模式?

2 个答案:

答案 0 :(得分:2)

包含在本书的errata注释中:

Page 121, first program: test "if (NF > 0)" is unnecessary.

所以这是出版商和/或文案编辑所犯的错误。

答案 1 :(得分:0)

NF&gt; 0用于检查此行中是否有任何字段,因为NF可能为0.

我举个例子:

awk '{print "hello";}' -
1
hello

hello

当我写“1”时,块被执行(打印“你好”),当我进入一个空行时我又被执行了(第二个“你好”)

如果我将代码更改为:

awk 'NF > 0 {print "hello";}' -
1
hello

当输入为空行时,它没有显示第二个“你好”,因为NF为0。