【发布时间】:2012-07-01 07:03:04
【问题描述】:
我正在写这段代码:
awk -F'=' '!/^$/{arr[$1]=$2}END{for (x in arr) {print x"="arr[x]}}' 1.txt 2.txt
此代码忽略空行,但我也想忽略以 # (cmets) 开头的行。
知道如何添加多个模式吗?
【问题讨论】:
我正在写这段代码:
awk -F'=' '!/^$/{arr[$1]=$2}END{for (x in arr) {print x"="arr[x]}}' 1.txt 2.txt
此代码忽略空行,但我也想忽略以 # (cmets) 开头的行。
知道如何添加多个模式吗?
【问题讨论】:
将!/^$/ 更改为
!/^($|#)/
或
!/^($|[:space:]*#)/
如果您想忽略 # 之前的空格。
【讨论】:
( 不需要在 awk ERE 中转义,因此这应该抑制以文字字符串 ($|#) 开头的行。这实际上在哪个版本的 awk 中有效?
awk 'NF && $1!~/^#/' data.txt
将打印所有非空行(NF 的字段数不是
零)和第一个字段不包含 # 的行。
它将正确处理一行空白,因为 NF 为零,而自 $1 以来的前导空白将忽略它们。
【讨论】:
echo "This# is not a comment" | awk 'NF && $1!~/#/' :/
^# .. echo "This# is not a comment" | awk 'NF && $1!~/^#/' 可以轻松解决此问题。我将测试更多其他案例。非常感谢您的反馈
awk 'NF && !/^[:space:]*#/' data.txt
因为 '[:space:]*' 捕获 none 或更多空格。
【讨论】: