テキストを読み、#で始まる行(つまりコメント行)に出会うawkを作成するにはどうすればよいですか?

テキストを読み、#で始まる行(つまりコメント行)に出会うawkを作成するにはどうすればよいですか?

段落が終わるまで、後続の各行の先頭に#の後にスペースが追加されます(段落は空行で区切られます)。すでに#で始まる行は変更されません。たとえば、次の入力は変更されません。

a b c
d e f
# g h i
j k l
m n o

p q r
s t u

# v w x
# y z 1
2 3 4
# 5 6 7
8 9 0

に修正されます

a b c
d e f
# g h i
# j k l
# m n o

p q r
s t u

# v w x
# y z 1
# 2 3 4
# 5 6 7
# 8 9 0

ベストアンサー1

この試み、

awk '/^$/{comm=0}{if($1~/^#/){comm=1}else{if(comm){$1="# "$1}} print}' file

または同じ内容の長い形式:

awk '
    # reset on empty line
    /^$/{comm=0}
    {
        if ($1~/^#/) {
            # start commenting lines when # found
            comm=1
        } 
        else { 
            # comment lines not starting with #
            if (comm){ $1="# "$1 } 
        }
        print
    }
' file

おすすめ記事