两个假设:
- 每个表一个单独sql
- 不导出行头
代码:
package main import ( "fmt" "io" "io/ioutil" "os" "regexp" "strings" ) func main() { if len(os.Args) != 3 { fmt.Println("Usage:\n mysql2csv <input> <output>") return } b, err := ioutil.ReadFile(os.Args[1]) if err != nil { panic(err) } str := string(b) reg := regexp.MustCompile(`(?m)^INSERT INTO.*?$`) res := reg.FindAllStringSubmatch(str, -1) f, err := os.OpenFile(os.Args[2], os.O_WRONLY|os.O_CREATE, 0600) if err != nil { panic(err) } defer f.Close() for _, sub := range res { s := strings.Index(sub[0], "(") e := strings.LastIndex(sub[0], ")") tuples := strings.Split(sub[0][s+1:e], "),(") for _, tuple := range tuples { io.WriteString(f, tuple) io.WriteString(f, "\n") } } }