我使用下面的语句在AWK文本管道输送到它从另一个命令: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)}'
这几乎是我需要什么(找一个关键词在内的正则表达式工作输入的前10行并打印该词)。我需要做的主要事情是输出一些东西,如果没有匹配。例如,如果在前十行中找不到这些单词,则会输出UNKNOWN
。
我还需要限制输出到第一个匹配,因为我需要确保每个输入文件的单行输出。我可以用head
来做到这一点,或者在需要时提出另一个问题,我只在这里包括它,以防它影响如何输出不匹配文本。
我也没有把awk当作一种工具 - 如果有更简单的方法来使用sed或其他东西,我可以使用它。
你有没有考虑过使用'if-else'?就像 - awk'{if($ 0 ==“your_match”){print“match”} else {print“no match”}}'' – Bill
如果我错了,请纠正我,但是当我第一次看到它时这样看起来好像会有两个问题 - 首先,我会为每一行触摸到一个“匹配”或“不匹配”,其次我必须写出完整的if-else给每个人一个可能的匹配词(上面的内容是最终列表很长的一个子集) - 使它成为一个非常长的命令。我可能也只是不明白你在暗示什么(并且这是给定的,我会改变'if($ 0 == ...'到'if($ 0〜...') –
@ ChrisO'Kelley是的,但是你可以根据你的习惯需要来适应这种情况,比如不打印,或者根据你的需要做其他事情。但是还有其他的方法可以做到这一点:) – Bill