我使用下面的語句在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