Skip to content

中文翻译:<benhoyt/goawk> 用 Go 编写的 AWK 解释器 ❤️ 校对 ✅

Notifications You must be signed in to change notification settings

chinanf-boy/goawk-zh

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

benhoyt/goawk explain translate-svg

「 用 Go 编写的 AWK 解释器 」

中文 | english


校对 ✅

翻译的原文 与日期 最新更新 更多
commit ⏰ 2018-11-17 last 中文翻译
详细了解 GoAWK 如何在工作和执行.(网页) github
原文en === 中文 ./goawk.zh.md

作者同意

贡献

欢迎 👏 勘误/校对/更新贡献 😊 具体贡献请看

生活

If help, buy me coffee —— 营养跟不上了,给我来瓶营养快线吧! 💰


GoAWK:用 Go 编写的 AWK 解释器

GoDoc TravisCI Build AppVeyor Build

AWK 是一种引人入胜的文本处理语言,在阅读了令人愉快的AWK 编程语言简洁之后,我很高兴能在 Go 中为它写一个解释器。所以,我宣布这里是,功能完整的测试套件"一个真正的 AWK"。

详细了解 GoAWK 如何工作和执行的.

基本用法

要使用命令行版本,只需使用go get安装它,然后使用goawk(假设$GOPATH/bin在你的PATH):

$ go get github.com/benhoyt/goawk
$ goawk 'BEGIN { print "foo", 42 }'
foo 42
$ echo 1 2 3 | goawk '{ print $1 + $3 }'
4

要在 Go 程序中使用它,您可以调用interp.Exec(),其直接满足简单需求:

input := bytes.NewReader([]byte("foo bar\n\nbaz buz"))
err := interp.Exec("$0 { print $1 }", " ", input, nil)
if err != nil {
    fmt.Println(err)
    return
}
// Output:
// foo
// baz

或者你可以使用parser模块,然后使用interp.ExecProgram()控制执行,设置变量等:

src := "{ print NR, tolower($0) }"
input := "A\naB\nAbC"

prog, err := parser.ParseProgram([]byte(src), nil)
if err != nil {
    fmt.Println(err)
    return
}
config := &interp.Config{
    Stdin: bytes.NewReader([]byte(input)),
    Vars:  []string{"OFS", ":"},
}
_, err = interp.ExecProgram(prog, config)
if err != nil {
    fmt.Println(err)
    return
}
// Output:
// 1:a
// 2:ab
// 3:abc

请阅读GoDoc 文档更多细节.

与 AWK 的差异

目的是让 GoAWK 遵守awk的行为和对POSIX AWK 规格,但本节介绍了一些不同的地方.

GoAWK 的其他功能优于 AWK:

  • 它可以嵌入你的 Go 程序中!
  • I/O 绑定的 AWK 脚本(大多数脚本)明显快于awk,与gawkmawk相比.
  • 解析器同时支持'单引号 strings',除了"double-quoted strings",主要是为了让 Windows 单行更容易(Windowscmd.exeshell 使用"作为引用字符).

AWK 超过 GoAWK 的:

  • CPU 绑定的 AWK 脚本比awk慢,和也比gawkmawk大约慢两倍.
  • AWK 由 Brian Kernighan 编写.

稳定性

这个项目有一套很好的测试,我亲自使用它,但它肯定没有经过实战测试,或大量使用,所以请自担风险使用。我不打算大改 Go API.

执照

GoAWK 是根据开源许可的MIT 许可证.

结束

玩得开心,请联络我,如果你正在使用 GoAWK 或有任何反馈!

About

中文翻译:<benhoyt/goawk> 用 Go 编写的 AWK 解释器 ❤️ 校对 ✅

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages