小文字の判定

文字が大文字なのか小文字なのかを判別したい時があると思います。 Web などの入力制限をしたり、エラーを見つけたりするのに使うこともありますが、awk では以下のようにしてチェックすることができます。

#! /usr/bin/gawk -f
# is_lower.awk - check string is lower or not

BEGIN {

    str = ARGV[1];

    for (i = 1; i <= length(ARGV[1]); i++) {
        if (is_lower(substr(str, i, 1))) {
            print substr(str, i, 1) " is all lower case."
        } else {
            print substr(str, i, 1) " is not lower calse."
        }
    }
}

#---------------------------------------------------------------------
# is_lower()
#   input:  1 character
#   output: 1 -> lower case
#           0 -> not lower case
function is_lower(str) {
    lower_str = tolower(str);

    if (lower_str == str && str !~ /[0-9]/) {
        return 1;
    } else {
        return 0;
    }
}

'Strings_01' という文字列に対して実行してみます。

$ gawk -f is_lower.awk Strings_01
S is not lower calse.
t is all lower case.
r is all lower case.
i is all lower case.
n is all lower case.
g is all lower case.
s is all lower case.
_ is all lower case.
0 is not lower calse.
1 is not lower calse.

ここでは記号についての定義を行なっていませんので、数字以外で tolower() 関数で同じ文字列を返す文字は全て小文字として判定しています。 もっとさまざまな文字に対しての判定を行なう場合には、もう少し複雑にする必要があるでしょう。

もちろん、tolower() 関数を toupper() 関数にすれば大文字の判定を行なうこともできます。

#---------------------------------------------------------------------
# is_upper()
#   input:  1 character
#   output: 1 -> upper case
#           0 -> not upper case
function is_lower(str) {
    lower_str = toupper(str);

    if (lower_str == str && str !~ /[0-9]/) {
        return 1;
    } else {
        return 0;
    }
}

tag_nawk.pngtag_nawk.pngtag_nawk.pngtag_nawk.png