awk: почему функция match выводит совпадающую строку, не упоминая ее для печати - PullRequest
0 голосов
/ 16 апреля 2019

У меня есть содержимое ниже:

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 Ответ

1 голос
/ 16 апреля 2019

Новые строки имеют значение.Это:

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().
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...