2012-06-29 54 views
4

我寫這段代碼:如何忽略空白行和註釋行用awk

awk -F'=' '!/^$/{arr[$1]=$2}END{for (x in arr) {print x"="arr[x]}}' 1.txt 2.txt 

該代碼忽略空行,但我也想忽略開頭的行#(註釋)。

任何想法如何添加多個模式?

回答

11

變化!/^$/

!/^($|#)/ 

!/^($|[:space:]*#)/ 
如果你想 #之前忽略空格

+0

這件作品魅力,謝謝。 – phani

+0

這不應該工作! ''(''不需要在awk EREs中被轉義,所以這應該是抑制以字符串'($ |#)'開頭的行在這個實際工作中awk的版本是什麼? –

+1

@WilliamPursell:我錯誤地編輯它有逃跑OP正在測試它,我已經編輯它回到正確的,原始版本 – chaos

8
awk 'NF && $1!~/^#/' data.txt 

將打印所有非空行(場NF的數量不 零),並且不包含#爲第一場線。

它將正確處理一行空白,因爲NF將爲零,並且由於$1將忽略它們而導致空白。

+0

這不會忽略只有空格的行。 – vergenzt

+0

@vergenzt我不認爲您的評論適用如果它確實發生了,請讓我知道,謝謝 – Levon

+0

它現在可以正確地檢測只有空白的行,但是這個測試用例失敗:'echo「這個#不是註釋」| awk'NF && $ 1!〜/#/ '':/ – vergenzt

0
awk 'NF && !/^[:space:]*#/' data.txt 

因爲 '[:空間:] *' 捕捉或多個空格。