//based on q22.1_cat* both //-n IS here package main import ( "bufio" "flag" "fmt" "io" "os" ) var nflag *bool = flag.Bool("n", false, "number all output lines") func fcat(s string) { fmt.Println("FCAT:", s) file, err := os.Open(s) if err != nil { fmt.Println(err) } fi, _ := os.Stat(s) data := make([]byte, fi.Size()) var next int64 for { count, err := file.ReadAt(data, int64(next)) if err != nil { file.Close() break } next += int64(count) fmt.Printf("%s", data[:count]) } println() } func ncat(s string) { fmt.Println("NCAT:", s) file, err := os.Open(s) if err != nil { fmt.Println(err) } r := bufio.NewReader(file) i := 1 for { data, err := r.ReadBytes('\n') fmt.Printf("%v %s", i, string(data)) i++ if err == io.EOF { file.Close() break } } println() } func main() { flag.Parse() for i := 0; i < flag.NArg(); i++ { if *nflag { ncat(flag.Arg(i)) } else { fcat(flag.Arg(i)) } } }