【问题标题】:how to ignore blank lines and comment lines using awk如何使用 awk 忽略空行和注释行
【发布时间】: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) 开头的行。

知道如何添加多个模式吗?

【问题讨论】:

    标签: regex linux bash awk


    【解决方案1】:

    !/^$/ 更改为

    !/^($|#)/
    

    !/^($|[:space:]*#)/
    

    如果您想忽略 # 之前的空格。

    【讨论】:

    • 这应该行不通! ( 不需要在 awk ERE 中转义,因此这应该抑制以文字字符串 ($|#) 开头的行。这实际上在哪个版本的 awk 中有效?
    • @WilliamPursell:我错误地编辑了它以进行转义,就像 OP 正在测试它一样。我已将其编辑回正确的原始版本。
    【解决方案2】:
    awk 'NF && $1!~/^#/' data.txt
    

    将打印所有非空行(NF 的字段数不是 零)和第一个字段不包含 # 的行。

    它将正确处理一行空白,因为 NF 为零,而自 $1 以来的前导空白将忽略它们。

    【讨论】:

    • 这不会忽略只有空格的行。
    • @vergenzt 我认为您的评论不再适用 - 如果适用,请告诉我,谢谢。
    • 它现在可以正确检测到只有空格的行,但是这个测试用例失败了:echo "This# is not a comment" | awk 'NF && $1!~/#/' :/
    • @vergenzt 哇 .. 很好 .. 谢谢。使用^# .. echo "This# is not a comment" | awk 'NF && $1!~/^#/' 可以轻松解决此问题。我将测试更多其他案例。非常感谢您的反馈
    【解决方案3】:
    awk 'NF && !/^[:space:]*#/' data.txt
    

    因为 '[:space:]*' 捕获 none 或更多空格。

    【讨论】:

      猜你喜欢
      • 2018-07-22
      • 1970-01-01
      • 1970-01-01
      • 2021-06-07
      • 2020-07-06
      • 2013-03-21
      • 2017-08-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多