Awk 从鹈鹕到雨果的迁徙

Awk 从鹈鹕到雨果的迁徙,awk,hugo,pelican,Awk,Hugo,Pelican,我正在读一篇演示如何将降价文件从Pelican迁移到Hugo的文章。我正在试图理解awk脚本正在做什么: # begin block, executed once, # to set field separator, output fied separator & print 3 dashes BEGIN { FS = ":"; OFS = ":"; print "---" } # ??? !c && /^$/ { print "---\n"; c = 1 } #

我正在读一篇演示如何将降价文件从Pelican迁移到Hugo的文章。我正在试图理解awk脚本正在做什么:

# begin block, executed once, 
# to set field separator, output fied separator & print 3 dashes
BEGIN { FS = ":"; OFS = ":"; print "---" }

# ??? 
!c && /^$/ { print "---\n"; c = 1 }

# user defined function?
c { print; next }

# user defined function?
!c {
    # lower first field
    $1 = tolower($1)

    # if first field is "date"
    if ($1 == "date") {
        # transform second field
        $2 = gensub(/ ([^.]+)\.([^.]+).([^.]+)/, " \\3-\\2-\\1", 1, $2)
        $2 = gensub(/-([0-9])-/, "-0\\1-", 1, $2)
    }

    if ($1 == "tags")
        $2 = " [" gensub(/[-a-z]+/, "'\\0'", "g", substr($2, 2)) "]"

    print
}

我真的不明白,什么是
c
!c
它们是用户定义的功能吗?没有函数关键字和参数?
c=1的确切含义是什么?

c
是一个变量
c=1
c
的值设置为
1

  • c
    是对变量
    c
    及其真值的测试,而不是
    0
  • !c
    是对变量
    c
    的测试,如果未设置
    c
    0
  • c{print;next}
    如果
    c
    设置为非空或
    0
    ,则
    print
    (将打印整行,因为未指定其他内容)<代码>下一步
停止正在做的事情,跳到下一行重新开始
c
是一个变量
c=1
c
的值设置为
1

  • c
    是对变量
    c
    及其真值的测试,而不是
    0
  • !c
    是对变量
    c
    的测试,如果未设置
    c
    0
  • c{print;next}
    如果
    c
    设置为非空或
    0
    ,则
    print
    (将打印整行,因为未指定其他内容)<代码>下一步停止正在做的事情,跳到下一行重新开始