Scripting awk:如果缺少,请添加一行

Scripting awk:如果缺少,请添加一行,scripting,awk,Scripting,Awk,我有一个处理.ICS日历文件的awk脚本。 如果缺少与会者行,我需要添加该行 我已经有了一个脚本,它解析了所有事件,只考虑了给定CHECKPARM条件所需的事件。如果与会者尚未出现,我需要添加该与会者 /BEGIN:VEVENT/ { cache = 1; } /CHECKPARM/ { if( index( $0, var ) ) printf( "%s", cached_lines ); else drop = 1; cached_l

我有一个处理.ICS日历文件的awk脚本。 如果缺少与会者行,我需要添加该行

我已经有了一个脚本,它解析了所有事件,只考虑了给定CHECKPARM条件所需的事件。如果与会者尚未出现,我需要添加该与会者

/BEGIN:VEVENT/ { cache = 1; }

/CHECKPARM/ {
    if( index( $0, var ) )
        printf( "%s", cached_lines );
    else
        drop = 1;
    cached_lines = "";
    cache = 0;
}

# this doesn't work
#!~ /ATTENDEE/ {
#    printf ("ATTENDEE: %s", organizer);
#}

cache  {
    cached_lines = cached_lines $0 "\n";
    next;
};

!drop { print; }

/END:VEVENT/ { drop = 0; }

尝试使用一个标志,如果有行,设置它,如果没有,添加行。 大概是这样的:

/ATTENDEE/ {att = 1}

!att {
    printf ("ATTENDEE: %s\n", organizer)
}

严格来说与编程有关的问题最好放在StackOverflow上。我将尝试将此项移到那里。删除波浪号以获得正确的否定匹配语法。您可能需要使用Fredrik Pihl回答中的标志,以便控制信息何时打印。否则,对于不包含字符串的每一行,否定匹配将为真,并且信息可能会被打印多次。