go语言实现筛选数据
Posted miria-486
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go语言实现筛选数据相关的知识,希望对你有一定的参考价值。
package main import ( "bufio" "fmt" "io" "os" "regexp" "strings" ) func main() { fileName := "log.log" file, err := os.OpenFile(fileName, os.O_RDWR, 0666) if err != nil { fmt.Println("Open file error!", err) return } defer file.Close() stat, err := file.Stat() if err != nil { panic(err) } var size = stat.Size() fmt.Println("file size=", size) buf := bufio.NewReader(file) f, err := os.Create("筛选的数据.txt") defer f.Close() for { line, err := buf.ReadString(‘ ‘) line = strings.TrimSpace(line) go findLine(line) if err != nil { if err == io.EOF { fmt.Println("File read ok!") break } else { fmt.Println("Read file error!", err) return } } } } func findLine(line string) { str := line ipret := regexp.MustCompile(`([0-9]{1,3}.){3}[0-9]{1,3}`) timeret := regexp.MustCompile(`[(.+)]`) articleret := regexp.MustCompile(`http://www.neusoft.com/article/[0-9]{1,4}`) videoret := regexp.MustCompile(`http://www.neusoft.com/video/[0-9]{1,4}`) ip := ipret.FindAllStringSubmatch(str, -1) time := timeret.FindAllStringSubmatch(str, -1) article := articleret.FindAllStringSubmatch(str, -1) video := videoret.FindAllStringSubmatch(str, -1) f, err := os.OpenFile("筛选的数据.txt", os.O_WRONLY, 0644) if err != nil { fmt.Println("cacheFileList.yml file create failed. err: " + err.Error()) } else { /*fmt.Println("all:", alls)*/ /*fmt.Println("all:", alls)*/ if ip != nil { n, _ := f.Seek(0, os.SEEK_END) // 从末尾的偏移量开始写入内容 _, err = f.WriteAt([]byte("ip: "+ip[0][0]+"/t"), n) fmt.Printf("ip:%s ", ip[0][0]) } for _, one := range time { n, _ := f.Seek(0, os.SEEK_END) // 从末尾的偏移量开始写入内容 _, err = f.WriteAt([]byte("time: "+one[0]+"/t"), n) fmt.Printf("时间:%s ", one[0]) } for _, one := range article { n, _ := f.Seek(0, os.SEEK_END) // 从末尾的偏移量开始写入内容 _, err = f.WriteAt([]byte("article: "+one[0]+"/t"), n) fmt.Printf("时间:%s ", one[0]) } for _, one := range video { n, _ := f.Seek(0, os.SEEK_END) // 从末尾的偏移量开始写入内容 _, err = f.WriteAt([]byte("video: "+one[0]+"/t"), n) fmt.Printf("时间:%s ", one[0]) } n, _ := f.Seek(0, os.SEEK_END) _, err = f.WriteAt([]byte(" "), n) } }
以上是关于go语言实现筛选数据的主要内容,如果未能解决你的问题,请参考以下文章