文字列の反転

いつものように mzp さんのところから問題を拝借します。 文字列の反転(UTF8対応) という問題です。

最新版の gawk (3.1.5 以降) は文字を文字単位で扱うことができますので、こうした文字単位に分割して反転させるのは簡単に実現させることができます。

#! /usr/bin/gawk -f
# rev.awk

BEGIN {
    print ARGV[1] ? rev(ARGV[1]) : "Please input ARGV[1]";
}

# rev():    文字列を反転します
#   in:     文字列 str
#   out:    文字列 str を反転した文字列
function rev(str) {
    for (i = length(str); i > 0; i--) {
        rev_str = rev_str substr(str, i, 1);
    }

    return rev_str;
}

gawk で試してみましょう。

$ gawk -f rev.awk abcde
edcba
$ gawk -f rev.awk あいうえお
おえういあ

nawk, mawk, Busybox の awk などは日本語を扱うことができないため、注意してください。

tag_gawk.pngtag_gawk.png