annotate src/ut/lu/lu.go @ 17:72ce457fb99d

ut: bug fix.
author pyon@macmini
date Wed, 20 Jun 2018 06:01:58 +0900
parents 38b64afbaf79
children 45ca03520eea
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
17
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
84 /* tar cvfz: done. */
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
85 func Tgz( tgzfile string, files []string ) {
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
86
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
87 tgz, err := os.Create( tgzfile )
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
88 if err != nil {
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
89 log.Fatal( err )
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
90 }
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
91 defer tgz.Close()
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
92
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
93 gw := gzip.NewWriter( tgz )
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
94 defer gw.Close()
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
95 tw := tar.NewWriter( gw )
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
96 defer tw.Close()
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
97
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
98 for _, file := range fullpath( files ) {
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
99 f, err := os.Open( file )
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
100 if err != nil {
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
101 log.Fatal( err )
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
102 }
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
103
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
104 stat, _ := f.Stat()
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
105 header := new( tar.Header )
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
106 header.Name = file
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
107 header.Size = stat.Size()
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
108 header.Mode = int64( stat.Mode() )
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
109 header.ModTime = stat.ModTime()
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
110
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
111 if err := tw.WriteHeader( header ); err != nil {
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
112 log.Fatal( err )
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
113 }
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
114 if _, err := io.Copy( tw, f ); err != nil {
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
115 log.Fatal( err )
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
116 }
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
117 f.Close()
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
118 }
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
119 }
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
120
16
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
121 /* tar xvfz: done. */
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
122 func UnTgz( files []string ) {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
123
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
124 for _, file := range files {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
125
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
126 f, err := os.Open( file )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
127 if 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 zr, err := gzip.NewReader( f )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
131 if err != nil {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
132 log.Fatal( err )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
133 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
134
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
135 tr := tar.NewReader( zr )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
136
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
137 for {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
138 hdr, err := tr.Next()
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
139 if err == io.EOF {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
140 break // End of archive
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
141 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
142 if err != nil {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
143 log.Fatal( err )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
144 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
145 fmt.Printf( "%s\n", hdr.Name )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
146
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
147 dir := filepath.Dir( hdr.Name )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
148 if ( dir != "" ) {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
149 os.MkdirAll( dir, 0744 )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
150 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
151 f, err := os.OpenFile( hdr.Name, os.O_RDWR|os.O_CREATE, 0644 )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
152 if err != nil {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
153 log.Fatal( err )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
154 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
155 if _, err := io.Copy( f, tr ); err != nil {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
156 log.Fatal( err )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
157 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
158
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
159 if err := f.Close(); err != nil {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
160 log.Fatal( err )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
161 }
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 if err := zr.Close(); err != nil {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
165 log.Fatal( err )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
166 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
167 }
17
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
168 }
16
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
169
17
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
170 func fullpath( files []string ) []string {
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
171 var buf []string
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
172 for _, f := range files {
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
173 fi, _ := os.Stat( f )
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
174 if fi.IsDir() {
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
175 filepath.Walk( f, func( path string, info os.FileInfo, err error ) error {
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
176 if !info.IsDir() {
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
177 buf = append( buf, path )
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
178 }
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
179 return nil
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
180 } )
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
181 } else {
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
182 buf = append( buf, f )
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
183 }
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
184 }
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
185 return buf
16
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 /* tac: done. */
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
189 func Reverse( files []string ) {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
190 var buf []string
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
191 if len( files ) == 0 {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
192 input := bufio.NewScanner( os.Stdin )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
193 for input.Scan() {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
194 buf = append( buf, input.Text() )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
195 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
196 } else {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
197 for _, file := range files {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
198 f, _ := os.Open( file )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
199 input := bufio.NewScanner( f )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
200 for input.Scan() {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
201 buf = append( buf, input.Text() )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
202 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
203 f.Close()
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
204 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
205 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
206 for i := len( buf ); i > 0; i-- {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
207 fmt.Println( buf[i-1] )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
208 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
209 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
210
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
211 func Grep( word string, inv bool, files []string ) {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
212 if len( files ) == 0 {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
213 fmt.Println("grep stdin")
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 fmt.Println("grep")
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
216 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
217 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
218
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
219 /* uniq: done. */
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
220 func Uniq( cnt, dup bool, files []string ) {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
221 var lines []string
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
222 lcnt := make( map[string]int )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
223 lpnt := make( map[string]bool )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
224
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
225 if len( files ) == 0 {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
226 input := bufio.NewScanner( os.Stdin )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
227 for input.Scan() {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
228 lines = append( lines, input.Text() )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
229 lcnt[ input.Text() ]++
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 for _, file := range files {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
233 f, _ := os.Open( file )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
234 input := bufio.NewScanner( f )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
235 for input.Scan() {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
236 lines = append( lines, input.Text() )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
237 lcnt[ input.Text() ]++
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
238 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
239 f.Close()
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
240 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
241 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
242
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
243 for _, line := range lines {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
244 if !lpnt[ line ] {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
245 if dup && lcnt[ line ] == 1 {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
246 continue
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
247 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
248 if cnt {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
249 fmt.Printf( "%5d ,", lcnt[ line ] )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
250 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
251 fmt.Printf( "%s\n", line )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
252 lpnt[ line ] = true
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 func Head( n int, files []string ) {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
258 if n > 0 {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
259 if len( files ) == 0 {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
260 input := bufio.NewScanner( os.Stdin )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
261 for input.Scan() {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
262 fmt.Println( input.Text() )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
263 n--
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
264 if n == 0 {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
265 return
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
266 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
267 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
268 } else {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
269 for _, file := range files {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
270 if n == 0 {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
271 return
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, _ := os.Open( file )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
274 input := bufio.NewScanner( f )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
275 for input.Scan() {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
276 fmt.Println( input.Text() )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
277 n--
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
278 if n == 0 {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
279 break
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 f.Close()
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
283 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
284 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
285 } else {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
286 if len( files ) == 0 {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
287
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
288 } else {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
289
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
290 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
291 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
292 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
293
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
294 /* replace: */
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
295 func Replace( s, t string, files []string ) {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
296 if len( files ) == 0 {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
297 input := bufio.NewScanner( os.Stdin )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
298 for input.Scan() {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
299 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
300 } else {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
301 for _, file := range files {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
302 f, _ := os.Open( file )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
303 input := bufio.NewScanner( f )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
304 for input.Scan() {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
305 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
306 f.Close()
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
307 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
308 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
309 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
310
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
311 /* touch: */
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
312 func Touch( files []string ) {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
313 for _, file := range files {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
314 f, _ := os.Open( file )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
315 f.Close()
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
316 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
317 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
318
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
319 /* md5: done. */
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
320 func Md5( files []string ) {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
321 for _, file := range files {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
322 f, _ := os.Open( file )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
323 h := md5.New()
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
324 if _, err := io.Copy( h, f ); err != nil {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
325 log.Fatal( err )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
326 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
327 f.Close()
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
328 if len( files ) == 1 {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
329 fmt.Printf( "%x\n", h.Sum( nil ) )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
330 } else {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
331 fmt.Printf( "%s:\t%x\n", file, h.Sum( nil ) )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
332 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
333 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
334 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
335
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
336 /* sha256: done. */
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
337 func Sha256( files []string ) {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
338 for _, file := range files {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
339 f, _ := os.Open( file )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
340 h := sha256.New()
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
341 if _, err := io.Copy( h, f ); err != nil {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
342 log.Fatal( err )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
343 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
344 f.Close()
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
345 if len( files ) == 1 {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
346 fmt.Printf( "%x\n", h.Sum( nil ) )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
347 } else {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
348 fmt.Printf( "%s:\t%x\n", file, h.Sum( nil ) )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
349 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
350 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
351 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
352