2012-06-29 55 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 

因为 '[:空间:] *' 捕捉或多个空格。