如果不匹配则打印awk

Chr*_*lly 1 regex awk sed

我在awk中使用以下语句,其中包含来自另一个命令的文本:

awk 'match($0,/(QUOTATION|TAX INVOICE|ADJUSTMENT NOTE|DELIVERY DOCKET|PICKING SLIP|REMITTANCE ADVICE|PURCHASE ORDER|STATEMENT)/) && NR<11 {print substr($0,RSTART,RLENGTH)}'
Run Code Online (Sandbox Code Playgroud)

这几乎可以满足我的需要(在输入的前10行中找到正则表达式中的一个单词并打印该单词).我需要做的主要是在没有匹配的情况下输出一些东西.例如,如果在前十行中找不到这些单词,则它将输出UNKNOWN.

我还需要将输出限制为第一个匹配,因为我需要确保每个输入文件的单行输出.head如果需要,我可以使用或提出另一个问题,我只在此处包含它,以防它影响如何输出不匹配文本.

我也没有把awk当作一个工具 - 如果有一个更简单的方法用sed或其他东西做这个我对它开放.

gle*_*man 5

您只需要在第一场比赛时退出,或者如果没有匹配则在第11行退出

awk '
    match($0,/(QUOTATION|TAX ... ORDER|STATEMENT)/) {
        print substr($0,RSTART,RLENGTH)
        exit
    }
    NR == 11 {print "UNKNOWN"; exit}
'
Run Code Online (Sandbox Code Playgroud)