単語ごとに区切る


ちょっと gawk の機能を使ってみたかったので作ってみました。

いわゆる文字クラスを用いているところと、まとめたい部分に故意に括弧をつけているあたりがポイントですかね。
いわゆる文であれば、コメントを冒頭に付けやすいのですが、関数の羅列だけど、全体である意味を成す場合にコメントが付けやすくなります。

#! /usr/bin/gawk -f
# usage: gawk -f split-words.awk 'phrases_within_single_quotes'
#   input:  phrase within single quotes (ARGV[1])
#   output: double quoted words

BEGIN {

    # section of spliting words
    {
        # add space top of upper cases
        ARGV[1] = gensub(/([[:upper:]]+)/, " \\1", "g", ARGV[1]);
        # remove unnecessary space
        sub(/ /, "", ARGV[1]);
        # split words
        n_argv = split(ARGV[1], a_argv, /[[:punct:][:space:]]+/);
    }

    # connect double quoted words
    for (i = 1; i <= n_argv; i++) {
        printf("\"%s\" ", a_argv[i]);
    }

    print "";
}

以下のような感じで split してくれます。

$ gawk -f split-words.awk 'Hello, World'
"Hello" "World"
$ gawk -f split-words.awk 'Hello, AWK'
"Hello" "AWK"
$ gawk -f split-words.awk 'Hello, WorldWideWeb'
"Hello" "World" "Wide" "Web"