package main import ( "bufio" "flag" "fmt" "log" "os" "sort" "strings" ) var src string = "" var dst string = "" var trm bool = false func init() { flag.StringVar(&src, "i", "", "Input File") flag.StringVar(&dst, "o", "", "Output File") flag.BoolVar(&trm, "t", false, "Trim all leading and trailing spaces of each line") flag.Parse() } func main() { if src == "" || dst == "" { flag.Usage() os.Exit(1) } fsi, err := os.Open(src) if err != nil { fmt.Printf("[ERR] %v\r\n", err) os.Exit(1) } defer fsi.Close() var lines []string scn := bufio.NewScanner(fsi) for scn.Scan() { if trm { lines = append(lines, strings.TrimSpace(scn.Text())) continue } lines = append(lines, scn.Text()) } sort.Strings(lines) fso, err := os.OpenFile(dst, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0666) if err != nil { fmt.Printf("[ERR] %v\r\n", err) } defer fso.Close() for _, line := range lines { _, err = fso.WriteString(line + "\r\n") if err != nil { log.Printf("[ERR] %v\r\n", err) continue } } fso.Sync() fso.Close() }