改行しかしない

改行しかしない - みずぴー日記 にインスパイヤされて、改行しかしないプログラムを awk で作ります。 「改行しかしない」というのは、元の問題である anarchy golf - Carriage no return を見ていただけると分かると思いますが、カーソルが先頭に戻らずに次の行に移ることを指します。

ここでは関数化を行いますが、前の行の情報を保持するため、ここでは文字列 last_str だけグローバル変数になっています。

#! /usr/local/bin/nawk -f
# no_return.awk
# 改行しかしない
# usage: nawk -f no_return.awk

{
    print no_return($0);
}

# no_return():      改行しかしない
#   in:     文字列 str
#   out:    前の行の文字数だけスペースを行頭に付けた文字列 str
function no_return(str,    old_space) {
    old_space = repeat_str(" ", length(last_str));
    last_str = last_str str;

    return old_space str;
}

# repeat_str():     文字列 str を数値 num 回繰り返す
#   in:     文字列 str
#           数値 num
#   out:    文字列 str を数値 num 回繰り返した文字列
function repeat_str(str, num,    i, result) {
    for (i = 1; i <= num; i++) {
        result = result str;
    }

    return result;
}

ここでは anarchy golf - Carriage no return の例を使ってみます。

$ cat sample_1.txt
apple
banana
orange
peach
grape
lemon
strawberry
persimmon
cherry
pear
avocado

$ nawk -f no_return.awk sample_1.txt
apple
     banana
           orange
                 peach
                      grape
                           lemon
                                strawberry
                                          persimmon
                                                   cherry
                                                         pear
                                                             avocado

このような感じで出力されれば OK です。

tag_nawk.png tag_nawk.png tag_nawk.png tag_nawk.png