cat_numbered.go 686 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. package main
  2. import (
  3. "bufio"
  4. "flag"
  5. "fmt"
  6. "io"
  7. "os"
  8. )
  9. var numberFlag = flag.Bool("n", false, "number each line")
  10. func cat(r *bufio.Reader) {
  11. i := 1
  12. for {
  13. buf, err := r.ReadBytes('\n')
  14. if err == io.EOF {
  15. break
  16. }
  17. if *numberFlag {
  18. fmt.Fprintf(os.Stdout, "%5d %s", i, buf)
  19. i++
  20. } else {
  21. fmt.Fprintf(os.Stdout, "%s", buf)
  22. }
  23. }
  24. return
  25. }
  26. func main() {
  27. flag.Parse()
  28. if flag.NArg() == 0 {
  29. cat(bufio.NewReader(os.Stdin))
  30. }
  31. for i := 0; i < flag.NArg(); i++ {
  32. f, err := os.Open(flag.Arg(i))
  33. if err != nil {
  34. fmt.Fprintf(os.Stderr, "%s:error reading from %s: %s\n", os.Args[0], flag.Arg(i), err.Error())
  35. continue
  36. }
  37. cat(bufio.NewReader(f))
  38. }
  39. }