我在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或其他东西做这个我对它开放.
您只需要在第一场比赛时退出,或者如果没有匹配则在第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)