parent
f54892934f
commit
cd6f70d1fe
@ -0,0 +1,2 @@ |
||||
head |
||||
head.exe |
||||
@ -0,0 +1,4 @@ |
||||
|
||||
|
||||
build: |
||||
go build .
|
||||
@ -0,0 +1,3 @@ |
||||
module lcthw.dev/go/go-coreutils/head |
||||
|
||||
go 1.25.3 |
||||
@ -0,0 +1,43 @@ |
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
"bufio" |
||||
"os" |
||||
"log" |
||||
"flag" |
||||
"io" |
||||
) |
||||
|
||||
func HeadFile(file io.Reader, count int) { |
||||
scan := bufio.NewScanner(file) |
||||
|
||||
for cur_line := 0; scan.Scan(); cur_line++ { |
||||
line := scan.Text() |
||||
|
||||
if cur_line < count { |
||||
fmt.Println(line) |
||||
} |
||||
} |
||||
|
||||
if scan.Err() != nil { log.Fatal(scan.Err()) } |
||||
} |
||||
|
||||
func main() { |
||||
var count int |
||||
|
||||
flag.IntVar(&count, "n", 10, "number of lines") |
||||
flag.Parse() |
||||
|
||||
if flag.NArg() > 0 { |
||||
files := flag.Args() |
||||
for _, fname := range files { |
||||
file, err := os.Open(fname) |
||||
if err != nil { log.Fatal(err) } |
||||
|
||||
HeadFile(file, count) |
||||
} |
||||
} else { |
||||
HeadFile(os.Stdin, count) |
||||
} |
||||
} |
||||
@ -0,0 +1,2 @@ |
||||
tail |
||||
tail.exe |
||||
@ -0,0 +1,4 @@ |
||||
|
||||
|
||||
build: |
||||
go build .
|
||||
@ -0,0 +1,3 @@ |
||||
module lcthw.dev/go/go-coreutils/tail |
||||
|
||||
go 1.25.3 |
||||
@ -0,0 +1,47 @@ |
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
"bufio" |
||||
"os" |
||||
"log" |
||||
"flag" |
||||
"io" |
||||
) |
||||
|
||||
func TailFile(file io.Reader, count int) { |
||||
scan := bufio.NewScanner(file) |
||||
var lines []string |
||||
|
||||
for scan.Scan() { |
||||
lines = append(lines, scan.Text()) |
||||
} |
||||
|
||||
if scan.Err() != nil { log.Fatal(scan.Err()) } |
||||
|
||||
start := len(lines) - count |
||||
if start < 0 { start = 0 } |
||||
|
||||
for line := int(start); line < len(lines); line++ { |
||||
fmt.Println(lines[line]) |
||||
} |
||||
} |
||||
|
||||
func main() { |
||||
var count int |
||||
|
||||
flag.IntVar(&count, "n", 10, "number of lines") |
||||
flag.Parse() |
||||
|
||||
if flag.NArg() > 0 { |
||||
files := flag.Args() |
||||
for _, fname := range files { |
||||
file, err := os.Open(fname) |
||||
if err != nil { log.Fatal(err) } |
||||
|
||||
TailFile(file, count) |
||||
} |
||||
} else { |
||||
TailFile(os.Stdin, count) |
||||
} |
||||
} |
||||
Loading…
Reference in new issue