cut is now working

master
Zed A. Shaw 1 week ago
parent 55fc99e01f
commit 8457f3d60d
  1. 2
      cut/.gitignore
  2. 4
      cut/Makefile
  3. 3
      cut/go.mod
  4. 64
      cut/main.go

2
cut/.gitignore vendored

@ -0,0 +1,2 @@
cut
cut.exe

@ -0,0 +1,4 @@
build:
go build .

@ -0,0 +1,3 @@
module lcthw.dev/go/go-coreutils/cut
go 1.25.3

@ -0,0 +1,64 @@
package main
import (
"fmt"
"flag"
"strings"
"log"
"strconv"
"bufio"
"os"
)
type Opts struct {
FieldOpt string
Fields []int
Delim string
}
func parse_opts() Opts {
var opts Opts
opts.Fields = make([]int, 0, 10)
flag.StringVar(&opts.FieldOpt, "f", "", "fields list")
flag.StringVar(&opts.Delim, "d", "\t", "delimiter byte")
flag.Parse()
if opts.FieldOpt == "" { log.Fatal("-f fields list required") }
for _, num := range strings.Split(opts.FieldOpt, ",") {
as_int, err := strconv.Atoi(num)
if err != nil { log.Fatal("-f can only contain numbers") }
opts.Fields = append(opts.Fields, as_int)
}
return opts
}
func main() {
opts := parse_opts()
scan := bufio.NewScanner(os.Stdin)
for scan.Scan() {
line := scan.Text()
chopped := strings.Split(line, opts.Delim)
for i, field_num := range opts.Fields {
if field_num >= len(chopped) {
fmt.Print("\n")
continue
}
fmt.Print(chopped[field_num])
if i < len(opts.Fields) - 1 {
fmt.Print(opts.Delim)
} else {
fmt.Print("\n")
}
}
}
}
Loading…
Cancel
Save