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) } }
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) } }
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.") }
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) } }
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.") }
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) } }
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) } }
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) } }
// 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) }) }
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) } }
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) } }
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) } }