package main import ( "bufio" "fmt" "io" "log" "os" ) func main() { if len(os.Args) != 2 { log.Fatalln("one argument: file name") } f, err := os.Open(os.Args[1]) if err != nil { log.Fatalf("failed to open file %s: %s", os.Args[1], err.Error()) } defer f.Close() var i int o := os.Stdout defer o.Close() // File should always start with '1' i++ if _, err = o.WriteString(fmt.Sprintf("%d\n", i)); err != nil { log.Fatalln("failed to write index:", err) } r := bufio.NewReader(f) var emptyLine bool for { emptyLine = false l, err := r.ReadString('\n') if err == io.EOF { break } if err != nil { log.Fatalln("failed to read line:", err) } if len(l) == 1 { emptyLine = true } if _, err = o.WriteString(l); err != nil { log.Fatalln("failed to write to output:", err) } if emptyLine { i++ if _, err := o.WriteString(fmt.Sprintf("%d\n", i)); err != nil { log.Fatalln("failed to write index:", err) } } } }