【问题标题】:How to specify case insensitivity in AWK within for loop? [duplicate]如何在 for 循环中的 AWK 中指定不区分大小写? [复制]
【发布时间】:2014-04-14 02:33:53
【问题描述】:

我有一条 awk 行:

awk -F'/|//'  '{for(i=1;i<=NF;i++) if($i=="CUST")break;print $(i)}'

我希望CUST 不区分大小写,我使用($i==CUST),因为该文件包含CUSTOMER 之类的字词,不应匹配。

我尝试使用 Character 类,例如:if($i=="[Cc][Uu][Ss][Tt]"),但这会引发错误。

【问题讨论】:

    标签: awk


    【解决方案1】:

    你的错误是当正则表达式比较运算符是 ~ 并且你的正则表达式字符串应该像 /^[Cc][Uu][Ss][Tt]$/ 时,你正在与 == 进行字符串比较 (注意锚点 ^$停止过度匹配)

    awk -F'/|//' '{for (i=1;i<=NF;i++) if ($i ~ /^[Cc][Uu[Ss][tT]$/)break; print $i}'
    

    更好的方法是使用IGNORECASE 变量或tolower, toupper 函数。

    【讨论】:

    • 这不匹配CUSTCUSTOMER 吗?如果我是正确的,OP 不喜欢匹配 CUSTOMER
    • @Jotne 对,但 IGNORECASE 或其中一个字符串函数是更好的方法,只是指出了 OPs 方法中的实际错误。
    【解决方案2】:

    使用awk

    toupper($i)
    

    tolower($i)
    

    像这样:

    awk -F'/|//'  '{for (i=1;i<=NF;i++) if (tolower($i) == "cust")break; print $i}'
    

    【讨论】:

      猜你喜欢
      • 2013-07-05
      • 1970-01-01
      • 2013-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-07
      相关资源
      最近更新 更多