awk IGNORECASE for for循环

时间:2011-11-09 16:18:38

标签: awk

我知道awk有IGNORECASE使操作不敏感。但我无法弄清楚如何在for循环中使用它。 例如:考虑这个awk脚本:

{
    for (i = 1; i <= NF; i++)
        counter[$i]++
}

在这里我知道我可以使用tolower,但如果我想用IGNORECASE = 1做什么,那么在计数时它会忽略大小写。

1 个答案:

答案 0 :(得分:1)

似乎还有很长的路要走。在这里查看更多信息:

“通常,您不能使用IGNORECASE使某些规则不区分大小写,而其他规则区分大小写,因为没有直接的方法来为特定规则的模式设置IGNORECASE .17为此,请使用括号表达式或tolower()。但是,你可以用IGNORECASE做的一件事就是一次动态地打开或关闭所有规则的区分大小写。“

来自:GNU Awk用户指南

编辑:

您应该考虑更好地规范您的问题。试试这个:

#Input: hello Hello HELLO World 
#Output: hello 3 World 1 

{for (i=1;i<=NF;i++){
    a=tolower($i) 
    count[a]=$i","count[a]
    }
}

END{for (i in count){
    split(count[i],res,",")
    l=length(res) - 1 
    if (l==1){
        print res[1],1 
    } else {
        print tolower(res[1]),l}
    }
}

HTH Chris