2012-01-04 38 views
19

我正在嘗試寫一個awk腳本,它檢查某些條件並丟棄符合這些條件的行。當條件被激活時,你如何獲得awk移動到下一行?

具體條件是丟棄文件的前兩行以及以文本xyzzy:開頭的任何行。爲此,我編碼了:

awk ' 
    NR < 2 {} 
    /^xyzzy:/ {} 
       {print}' 

認爲它會丟棄符合這兩個條件之一的行並且否則打印。

不幸的是,看起來print正在被處理,即使該行與其他兩個模式中的一個匹配。

是否存在類似C的continue操作,該操作將在下一行上移動,而忽略當前行的所有其他條件檢查?

我想我可能使用類似((NR > 1) && (!/^xyzzy:/)) {print}作爲第三條規則,但這對我來說似乎相當醜陋。

另外,是否有另一種方法來做到這一點?

+0

我不是專家,但這裏是一個非常好的[教程](http://www.grymoire.com/Unix/Awk。 html),當我開始學習它時,我發現它非常有用。當然還有一個非常詳盡的指南(http://www.gnu.org/software/gawk/manual/gawk.pdf)。但我喜歡書本上的教程。 :) – 2012-01-04 07:16:01

回答

29

使用關鍵字next爲您的行動

當你要遍歷2檔這個關鍵字往往是有用的;有時它是你想要處理兩次的相同文件。

你會看到下面的語句:對`awk`

awk ' 
FNR==NR { 
    < stuff that works on file 1 only > 
    next 
} 
{ 
    < stuff that works on file 2 only > 
}' ./infile1 ./infile2 
+0

啊,應該在發佈之前嘗試過Perlish'next'。附:我試過了'NR = <2',它被禁止了,所以我假設你的意思是'NR <= 2'(並相應地固定)。乾杯。 – paxdiablo 2012-01-04 06:49:32

+0

哎呀,對,這就是我的意思。 – SiegeX 2012-01-04 06:51:18

+1

'next'是** awk中最好的**特性之一。 :) – 2012-01-04 07:17:01

相關問題