awk IGNORECASE in for循环

awk IGNORECASE in for循环,awk,Awk,我知道awk有IGNORECASE使操作不区分大小写。但我不知道如何在for循环中使用它。 例如:考虑这个AWK脚本: { for (i = 1; i <= NF; i++) counter[$i]++ } { 对于(i=1;itolower,这似乎是一条可行之路。请查看此处了解更多信息: “一般来说,您不能使用IGNORECASE使某些规则不区分大小写,而使其他规则区分大小写,因为没有直接的方法仅为特定规则的模式设置IGNORECASE。17为此,请使用括号表达

我知道awk有IGNORECASE使操作不区分大小写。但我不知道如何在for循环中使用它。 例如:考虑这个AWK脚本:

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

对于(i=1;itolower,这似乎是一条可行之路。请查看此处了解更多信息:

“一般来说,您不能使用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}
    }
}
#输入:你好世界
#输出:你好3世界1

{对于(i=1;iChris),tolower的问题是,它在打印最终输出时将所有内容都转换为小写。如果我希望它在执行outputHow about:a=$i,counter[tolower(a)]++。这使$i保持不变,但增加了计数器不区分大小写。Chris,我现在还有一个问题。现在如何输出单词并计数:对于(计数器中的单词)printf“%s\t%d\n”,单词,计数器[word]这仍然不能维持打印outSee我编辑的答案时的文字情况。如果这仍然不能回答您的问题,请后退一步,考虑更好地描述您的问题并打开一个新问题。啊哈,awk编程语言是最好的。但是robbins的gawk手册非常好而且免费。