awk IGNORECASE в течение цикла - PullRequest
0 голосов
/ 09 ноября 2011

Я знаю, что в awk есть IGNORECASE, чтобы сделать регистр операций нечувствительным.Но я не могу понять, как использовать его в цикле for.Например: рассмотрим этот сценарий awk:

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

Здесь я знаю, что могу использовать tolower, но что, если я хочу сделать это с IGNORECASE = 1, чтобы он игнорировал регистр при подсчете.

1 Ответ

1 голос
/ 09 ноября 2011

Tolower кажется, путь. Смотрите здесь для получения дополнительной информации:

"В общем, вы не можете использовать IGNORECASE, чтобы сделать некоторые правила нечувствительными к регистру, а другие правила чувствительны к регистру, потому что не существует простого способа установить IGNORECASE только для шаблона конкретного правила.17 Для этого используйте либо выражения в скобках или tolower (). Однако с IGNORECASE можно сделать только одну вещь - динамически включать или выключать чувствительность к регистру для всех правил одновременно. "

от: Руководство пользователя GNU Awk

EDIT:

Вы должны подумать о лучшей спецификации вашей проблемы. Попробуйте это:

#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 Крис

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...