Sort is now working.

master
Zed A. Shaw 1 week ago
parent cd6f70d1fe
commit be54bf3e7d
  1. 2
      sort/.gitignore
  2. 4
      sort/Makefile
  3. 3
      sort/go.mod
  4. 66
      sort/main.go
  5. 18
      sort/test.txt

2
sort/.gitignore vendored

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

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

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

@ -0,0 +1,66 @@
package main
import (
"fmt"
"bufio"
"os"
"slices"
"flag"
"strings"
"strconv"
)
type Opts struct {
IgnoreCase bool
Numeric bool
}
func parse_opts() Opts {
var opts Opts
flag.BoolVar(&opts.IgnoreCase, "f", false, "ignore case")
flag.BoolVar(&opts.Numeric, "n", false, "numeric sort")
flag.Parse()
return opts
}
func numeric_sort(a string, b string) int {
a_int, a_err := strconv.Atoi(a)
b_int, b_err := strconv.Atoi(b)
if a_err != nil || b_err != nil {
return strings.Compare(a, b)
} else {
return a_int - b_int
}
}
func ignore_case_sort(a string, b string) int {
return strings.Compare(strings.ToLower(a), strings.ToLower(b))
}
func main() {
lines := make([]string, 0, 100)
opts := parse_opts()
scan := bufio.NewScanner(os.Stdin)
for scan.Scan() {
line := scan.Text()
lines = append(lines, line)
}
if opts.Numeric {
slices.SortFunc(lines, numeric_sort)
} else if opts.IgnoreCase{
slices.SortFunc(lines, ignore_case_sort)
} else {
slices.Sort(lines)
}
for _, line := range lines {
fmt.Println(line)
}
}

@ -0,0 +1,18 @@
head
numfmt
od
sha512sum
sort
starter
LICENSE
outline.txt
README.md
stat
tail
tr
uniq
cat
date
du
wc
.gitignore
Loading…
Cancel
Save