awk:为什么match函数不打印就打印匹配的行

时间:2019-04-16 18:34:55

标签: awk

我具有以下内容:

NODE_1
port 1
description blah
port 2
description blah blah
NODE_2
port 1
description blah
port 2
description blah
NODE_3
port 1
port 2
NODE_4
port 1
port 2
NODE_5
port 1
port 2
NODE_6
port 1
description blahdy blah
port 2
description floop-a-doop

我正在尝试打印NODE的前三场比赛的比赛属性

awk 'BEGIN{count=0}
    match($0,/NODE/,a)
    {
    if(RSTART != 0){
        print "*******************************"
        for (i in a)
        print i"-->"a[i]
        count++;
        print "count-->"count;    
        print "*******************************"
        }
    if (count >= 3)
        {
        exit
        }
    }' awksampledata5.txt

输出为

NODE_1
*******************************
0start-->1
0length-->4
0-->NODE
count-->1
*******************************
NODE_2
*******************************
0start-->1
0length-->4
0-->NODE
count-->2
*******************************
NODE_3
*******************************
0start-->1
0length-->4
0-->NODE
count-->3
*******************************

我不希望打印NODE_1,NODE_2和NODE_3。但是我不知道它是如何打印的。

答案编辑代码:

$ awk 'BEGIN{count=0}
        match($0,/NODE/,a){
        if(RSTART != 0){  <-- this matters  new lines matters.
            print "*******************************"
            for (i in a)
            print i"-->"a[i]
            count++;
            print "count-->"count;
            print "*******************************"
            }
        if (count >= 3)
            {
            exit
            }
        }' awksampledata5.txt
*******************************
0start-->1
0length-->4
0-->NODE
count-->1
*******************************
*******************************
0start-->1
0length-->4
0-->NODE
count-->2
*******************************
*******************************
0start-->1
0length-->4
0-->NODE
count-->3
*******************************

1 个答案:

答案 0 :(得分:0)

换行很重要。这个:

match($0,/foo/)
{ bar() }

与以下两个都不相同:

match($0,/foo/) { bar() }

match($0,/foo/) {
    bar()
}

第一个脚本说

If "foo" exists in $0 then print the current record.
Call bar().

其他2个人说:

If "foo" exists in $0 then call bar().