Awk 从鹈鹕到雨果的迁徙
我正在读一篇演示如何将降价文件从Pelican迁移到Hugo的文章。我正在试图理解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 } #
# 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