예제 #1
0
func main() {
	s := awk.NewScript()
	s.AppendStmt(func(s *awk.Script) bool { return s.F(1).Int()%2 == 1 }, nil)
	if err := s.Run(os.Stdin); err != nil {
		panic(err)
	}
}
예제 #2
0
파일: Example16C.go 프로젝트: suntong/lang
func main() {
	s := awk.NewScript()

	sa := s.NewValueArray()
	sa.Set("prev", "")
	s.AppendStmt(func(s *awk.Script) bool {
		return !s.F(1).StrEqual(sa.Get("prev").String())
	},
		func(s *awk.Script) {
			//s.Println()
			fmt.Println(s.F(0))
			sa.Set("prev", s.F(1))
			fmt.Println(sa.Get("prev").String())
		})

	s.End = func(s *awk.Script) {
		fmt.Println(sa.Get("no-exist").String())
		fmt.Println(sa.Get("no-exist").Int())
		sa.Set("no-exist", 3)
		fmt.Println(sa.Get("no-exist").String())
		fmt.Println(sa.Get("prev").String())
	}

	if err := s.Run(os.Stdin); err != nil {
		panic(err)
	}
}
예제 #3
0
파일: SkipLine2.go 프로젝트: suntong/lang
func main() {
	s := awk.NewScript()

	s.AppendStmt(nil, func(s *awk.Script) {
		// Validate the current line.
		for i := 1; i <= 3; i++ {
			if s.F(i).Int() != (s.NR-1)*3+i {
				check((s.NR-1)*3+i, s.F(i).Int())
			}
		}
		println(".", s.NR, s.F(0).String())

		// Skip till ^7.
		for !s.F(0).Match("^7") {
			v, err := s.GetLine(nil)
			if err != nil {
				return // panic(err)
			}
			s.SetF(0, v)
			println(">", s.NR, v.String())
		}
	})

	if err := s.Run(os.Stdin); err != nil {
		panic(err)
	}

	println("Passed.")
}
예제 #4
0
파일: Example11.go 프로젝트: suntong/lang
func main() {
	s := awk.NewScript()
	s.AppendStmt(nil, func(s *awk.Script) { s.Println(s.F(2), s.F(1)) })
	if err := s.Run(os.Stdin); err != nil {
		panic(err)
	}
}
예제 #5
0
파일: GetLine.go 프로젝트: suntong/lang
func main() {
	s := awk.NewScript()

	s.AppendStmt(nil, func(s *awk.Script) {
		// Validate the current line.
		for i := 1; i <= 3; i++ {
			if s.F(i).Int() != (s.NR-1)*3+i {
				check((s.NR-1)*3+i, s.F(i).Int())
			}
		}

		// Read and validate the next line.
		line, err := s.GetLine(nil)
		if err != nil {
			panic(err)
		}
		s.SetF(0, line)
		for i := 1; i <= 3; i++ {
			if s.F(i).Int() != (s.NR-1)*3+i {
				check((s.NR-1)*3+i, s.F(i).Int())
			}
		}
		println(".")
	})

	if err := s.Run(os.Stdin); err != nil {
		panic(err)
	}

	println("Passed.")
}
예제 #6
0
파일: Example05.go 프로젝트: suntong/lang
func main() {
	s := awk.NewScript()
	s.AppendStmt(func(s *awk.Script) bool {
		return s.F(2).Match("6:") && !s.F(1).Match("6:")
	}, nil)
	if err := s.Run(os.Stdin); err != nil {
		panic(err)
	}
}
예제 #7
0
파일: Example16A.go 프로젝트: suntong/lang
func main() {
	s := awk.NewScript()

	s.State = s.NewValue("")
	s.AppendStmt(func(s *awk.Script) bool { return !s.F(1).StrEqual(s.State) },
		func(s *awk.Script) {
			s.Println()
			s.State = s.F(1)
		})

	if err := s.Run(os.Stdin); err != nil {
		panic(err)
	}
}
예제 #8
0
파일: Comments.go 프로젝트: suntong/lang
func main() {
	s := awk.NewScript()
	s.MaxRecordSize = 24 * 1024 * 1024
	s.MaxFieldSize = 24 * 1024 * 1024

	s.AppendStmt(func(s *awk.Script) bool {
		return s.F(1).Match("<Comment")
	}, func(s *awk.Script) {})
	// 1; # i.e., print all
	s.AppendStmt(nil, nil)

	if err := s.Run(os.Stdin); err != nil {
		panic(err)
	}
}
예제 #9
0
파일: Pipe_Awk.go 프로젝트: suntong/lang
// Awk1 writes the first two fields in opposite order if the second field does
// not match the regular expression "4:" and the first field does not match "7"
// (AWK: $2 !~ /4:/ && $1 !~ /7/ {print $2, $1}).
func Awk1() pipe.Pipe {
	return pipe.TaskFunc(func(st *pipe.State) error {
		// == Setup
		s := awk.NewScript()
		s.Output = st.Stdout

		// == Transform
		s.AppendStmt(func(s *awk.Script) bool {
			return !s.F(2).Match("4:") && !s.F(1).Match("7")
		}, func(s *awk.Script) { s.Println(s.F(2), s.F(1)) })

		// == Run it
		return s.Run(st.Stdin)
	})
}
예제 #10
0
파일: Example13.go 프로젝트: suntong/lang
func main() {
	s := awk.NewScript()

	s.Begin = func(s *awk.Script) {
		s.SetFS(",[ \t]*|[ \t]+")
		s.State = 0.0
	}

	s.AppendStmt(nil, func(s *awk.Script) { s.State = s.State.(float64) + s.F(1).Float64() })

	s.End = func(s *awk.Script) {
		sum := s.State.(float64)
		s.Println("sum is", sum, "average is", sum/float64(s.NR))
	}

	if err := s.Run(os.Stdin); err != nil {
		panic(err)
	}
}
예제 #11
0
파일: SkipLine1.go 프로젝트: suntong/lang
func main() {
	scr := awk.NewScript()
	scr.AppendStmt(func(s *awk.Script) bool {
		return s.F(0).Match("^B")
	}, func(s *awk.Script) {
		for !s.F(0).Match("^E") {
			v, err := s.GetLine(nil)
			if err != nil {
				return
			}
			s.SetF(0, v)
		}
		s.Next()
	})
	scr.AppendStmt(nil, nil)

	if err := scr.Run(os.Stdin); err != nil {
		panic(err)
	}
}
예제 #12
0
파일: Wp2Hugo.go 프로젝트: suntong/lang
func main() {
	s := awk.NewScript()

	s.Begin = func(s *awk.Script) {
		s.SetFS("[][ ]")
	}
	s.State = s.NewValue("")

	// NR == 1 & $0 ~ /^# +/ { State = $0 }
	s.AppendStmt(func(s *awk.Script) bool { return s.NR == 1 && s.F(0).Match("^# +") },
		func(s *awk.Script) {
			s.State = s.F(0)
			s.Next()
		})

	// /^\[category/ { convert meta data format }
	s.AppendStmt(func(s *awk.Script) bool { return s.F(0).Match("^\\[category") },
		func(s *awk.Script) {
			re := regexp.MustCompile("^# +(.*)$")
			fmt.Println(re.ReplaceAllString(s.State.(*awk.Value).String(),
				"---\ntitle: \"$1\""))
			fmt.Printf("date: \"%s\"\n", time.Now().Format(time.RFC3339))
			fmt.Printf("categories: [\"%s\"]\n", s.F(3))
			fmt.Printf("%s: [%s]\n", s.F(5), quoteEach(s.F(6).String()))
			fmt.Println("---\n")
			//s.Exit()
			s.Next()
		})

	// 1; # i.e., print all
	s.AppendStmt(nil, nil)

	if err := s.Run(os.Stdin); err != nil {
		panic(err)
	}
}