从鹈鹕到雨果的迁移
Migration from Pelican to Hugo
我正在阅读 article 展示如何将降价文件从 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
= tolower()
# if first field is "date"
if ( == "date") {
# transform second field
= gensub(/ ([^.]+)\.([^.]+).([^.]+)/, " \3-\2-\1", 1, )
= gensub(/-([0-9])-/, "-0\1-", 1, )
}
if ( == "tags")
= " [" gensub(/[-a-z]+/, "'\0'", "g", substr(, 2)) "]"
print
}
我不是很明白,c
和!c
是什么用户自定义函数?没有 function 关键字和参数? c=1
到底是什么意思?
c
是一个变量。 c=1
将 c
的值设置为 1
c
是对变量 c
及其真实性的测试,0
除外
!c
是对变量 c
的测试,如果 c
未设置或 0
则为真
c { print; next }
如果 c
设置为 nothing 或 0
以外的其他值,则 print
(将打印整行,因为没有指定其他值)。 next
停止您正在做的事情并跳到下一行并重新开始。
我正在阅读 article 展示如何将降价文件从 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
= tolower()
# if first field is "date"
if ( == "date") {
# transform second field
= gensub(/ ([^.]+)\.([^.]+).([^.]+)/, " \3-\2-\1", 1, )
= gensub(/-([0-9])-/, "-0\1-", 1, )
}
if ( == "tags")
= " [" gensub(/[-a-z]+/, "'\0'", "g", substr(, 2)) "]"
print
}
我不是很明白,c
和!c
是什么用户自定义函数?没有 function 关键字和参数? c=1
到底是什么意思?
c
是一个变量。 c=1
将 c
的值设置为 1
c
是对变量c
及其真实性的测试,0
除外
!c
是对变量c
的测试,如果c
未设置或0
则为真
c { print; next }
如果c
设置为 nothing 或0
以外的其他值,则print
(将打印整行,因为没有指定其他值)。next
停止您正在做的事情并跳到下一行并重新开始。