parent
cd6f70d1fe
commit
be54bf3e7d
@ -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…
Reference in new issue