ipsort/main.go

53 lines
806 B
Go

// command svsort sorts lines of text by semver at beginning of line
package main
import (
"bufio"
"bytes"
"fmt"
"log"
"net"
"os"
"sort"
"strings"
)
type lines []string
func (l lines) Len() int { return len(l) }
func (l lines) Swap(i, j int) { l[i], l[j] = l[j], l[i] }
func (l lines) Less(i, j int) bool {
var a, b net.IP
for _, s := range strings.Fields(l[i]) {
a = net.ParseIP(s)
if a != nil {
break
}
}
for _, s := range strings.Fields(l[j]) {
b = net.ParseIP(s)
if b != nil {
break
}
}
return bytes.Compare(a, b) < 0
}
func main() {
s := bufio.NewScanner(os.Stdin)
ls := lines{}
for s.Scan() {
ls = append(ls, s.Text())
}
if err := s.Err(); err != nil {
log.Fatalf("scan: %v")
}
sort.Sort(ls)
for _, l := range ls {
fmt.Printf("%v\n", l)
}
}