annotate src/ut/lu/lu.go @ 16:38b64afbaf79

add ut. ( unix-like tools )
author pyon@macmini
date Sun, 17 Jun 2018 20:29:45 +0900
parents
children 72ce457fb99d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
16
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
1 /*
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
2 little unix tool library.
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
3 */
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
4 package lu
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
5
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
6 import (
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
7 "archive/tar"
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
8 "bufio"
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
9 "bytes"
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
10 "compress/gzip"
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
11 "crypto/md5"
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
12 "crypto/sha256"
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
13 "fmt"
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
14 "io"
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
15 "log"
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
16 "os"
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
17 "os/exec"
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
18 "path/filepath"
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
19 "strings"
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
20 )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
21
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
22 func CmdTime( cmdline string ) {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
23 cmd := exec.Command( "ls", "-l" )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
24 cmd.Stdin = strings.NewReader( "some input" )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
25 var out bytes.Buffer
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
26 cmd.Stdout = &out
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
27 err := cmd.Run()
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
28 if err != nil {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
29 log.Fatal( err )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
30 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
31 fmt.Printf( "%q\n", out.String() )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
32 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
33
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
34 /* cut -d, -f: */
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
35 func CutCsv( files []string, cols []string ) {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
36 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
37
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
38 /* cat -n: done. */
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
39 func Cat_n( files []string ) {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
40 if len( files ) == 0 {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
41 cnt := 1
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
42 input := bufio.NewScanner( os.Stdin )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
43 for input.Scan() {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
44 fmt.Printf( "%5d %s\n", cnt, input.Text() )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
45 cnt++
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
46 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
47 } else {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
48 for _, file := range files {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
49 cnt := 1
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
50 f, _ := os.Open( file )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
51 input := bufio.NewScanner( f )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
52 for input.Scan() {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
53 fmt.Printf( "%5d %s\n", cnt, input.Text() )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
54 cnt++
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
55 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
56 f.Close()
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
57 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
58 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
59 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
60
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
61 /* wc -l: done. */
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
62 func Wc_l( files []string ) {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
63 if len( files ) == 0 {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
64 cnt := 0
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
65 input := bufio.NewScanner( os.Stdin )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
66 for input.Scan() {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
67 cnt++
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
68 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
69 fmt.Printf( "%d\n", cnt )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
70 } else {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
71 for _, file := range files {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
72 cnt := 0
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
73 f, _ := os.Open( file )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
74 input := bufio.NewScanner( f )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
75 for input.Scan() {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
76 cnt++
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
77 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
78 f.Close()
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
79 fmt.Printf( "%s:\t%5d\n", file, cnt )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
80 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
81 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
82 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
83
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
84 /* tar xvfz: done. */
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
85 func UnTgz( files []string ) {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
86
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
87 for _, file := range files {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
88
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
89 f, err := os.Open( file )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
90 if err != nil {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
91 log.Fatal( err )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
92 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
93 zr, err := gzip.NewReader( f )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
94 if err != nil {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
95 log.Fatal( err )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
96 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
97
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
98 tr := tar.NewReader( zr )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
99
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
100 for {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
101 hdr, err := tr.Next()
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
102 if err == io.EOF {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
103 break // End of archive
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
104 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
105 if err != nil {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
106 log.Fatal( err )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
107 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
108 fmt.Printf( "%s\n", hdr.Name )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
109
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
110 dir := filepath.Dir( hdr.Name )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
111 if ( dir != "" ) {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
112 os.MkdirAll( dir, 0744 )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
113 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
114 f, err := os.OpenFile( hdr.Name, os.O_RDWR|os.O_CREATE, 0644 )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
115 if err != nil {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
116 log.Fatal( err )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
117 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
118 if _, err := io.Copy( f, tr ); err != nil {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
119 log.Fatal( err )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
120 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
121
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
122 if err := f.Close(); err != nil {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
123 log.Fatal( err )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
124 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
125 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
126
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
127 if err := zr.Close(); err != nil {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
128 log.Fatal( err )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
129 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
130 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
131
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
132 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
133
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
134 /* tac: done. */
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
135 func Reverse( files []string ) {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
136 var buf []string
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
137 if len( files ) == 0 {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
138 input := bufio.NewScanner( os.Stdin )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
139 for input.Scan() {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
140 buf = append( buf, input.Text() )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
141 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
142 } else {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
143 for _, file := range files {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
144 f, _ := os.Open( file )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
145 input := bufio.NewScanner( f )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
146 for input.Scan() {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
147 buf = append( buf, input.Text() )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
148 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
149 f.Close()
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
150 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
151 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
152 for i := len( buf ); i > 0; i-- {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
153 fmt.Println( buf[i-1] )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
154 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
155 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
156
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
157 func Grep( word string, inv bool, files []string ) {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
158 if len( files ) == 0 {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
159 fmt.Println("grep stdin")
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
160 } else {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
161 fmt.Println("grep")
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
162 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
163 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
164
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
165 /* uniq: done. */
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
166 func Uniq( cnt, dup bool, files []string ) {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
167 var lines []string
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
168 lcnt := make( map[string]int )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
169 lpnt := make( map[string]bool )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
170
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
171 if len( files ) == 0 {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
172 input := bufio.NewScanner( os.Stdin )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
173 for input.Scan() {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
174 lines = append( lines, input.Text() )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
175 lcnt[ input.Text() ]++
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
176 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
177 } else {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
178 for _, file := range files {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
179 f, _ := os.Open( file )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
180 input := bufio.NewScanner( f )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
181 for input.Scan() {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
182 lines = append( lines, input.Text() )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
183 lcnt[ input.Text() ]++
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
184 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
185 f.Close()
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
186 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
187 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
188
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
189 for _, line := range lines {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
190 if !lpnt[ line ] {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
191 if dup && lcnt[ line ] == 1 {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
192 continue
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
193 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
194 if cnt {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
195 fmt.Printf( "%5d ,", lcnt[ line ] )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
196 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
197 fmt.Printf( "%s\n", line )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
198 lpnt[ line ] = true
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
199 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
200 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
201 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
202
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
203 func Head( n int, files []string ) {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
204 if n > 0 {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
205 if len( files ) == 0 {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
206 input := bufio.NewScanner( os.Stdin )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
207 for input.Scan() {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
208 fmt.Println( input.Text() )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
209 n--
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
210 if n == 0 {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
211 return
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
212 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
213 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
214 } else {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
215 for _, file := range files {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
216 if n == 0 {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
217 return
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
218 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
219 f, _ := os.Open( file )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
220 input := bufio.NewScanner( f )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
221 for input.Scan() {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
222 fmt.Println( input.Text() )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
223 n--
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
224 if n == 0 {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
225 break
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
226 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
227 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
228 f.Close()
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
229 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
230 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
231 } else {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
232 if len( files ) == 0 {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
233
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
234 } else {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
235
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
236 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
237 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
238 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
239
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
240 /* replace: */
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
241 func Replace( s, t string, files []string ) {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
242 if len( files ) == 0 {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
243 input := bufio.NewScanner( os.Stdin )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
244 for input.Scan() {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
245 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
246 } else {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
247 for _, file := range files {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
248 f, _ := os.Open( file )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
249 input := bufio.NewScanner( f )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
250 for input.Scan() {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
251 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
252 f.Close()
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
253 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
254 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
255 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
256
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
257 /* touch: */
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
258 func Touch( files []string ) {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
259 for _, file := range files {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
260 f, _ := os.Open( file )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
261 f.Close()
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
262 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
263 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
264
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
265 /* md5: done. */
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
266 func Md5( files []string ) {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
267 for _, file := range files {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
268 f, _ := os.Open( file )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
269 h := md5.New()
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
270 if _, err := io.Copy( h, f ); err != nil {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
271 log.Fatal( err )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
272 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
273 f.Close()
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
274 if len( files ) == 1 {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
275 fmt.Printf( "%x\n", h.Sum( nil ) )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
276 } else {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
277 fmt.Printf( "%s:\t%x\n", file, h.Sum( nil ) )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
278 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
279 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
280 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
281
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
282 /* sha256: done. */
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
283 func Sha256( files []string ) {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
284 for _, file := range files {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
285 f, _ := os.Open( file )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
286 h := sha256.New()
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
287 if _, err := io.Copy( h, f ); err != nil {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
288 log.Fatal( err )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
289 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
290 f.Close()
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
291 if len( files ) == 1 {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
292 fmt.Printf( "%x\n", h.Sum( nil ) )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
293 } else {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
294 fmt.Printf( "%s:\t%x\n", file, h.Sum( nil ) )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
295 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
296 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
297 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
298