Skip to content

Instantly share code, notes, and snippets.

@qbig
Created August 14, 2018 14:13
Show Gist options
  • Select an option

  • Save qbig/34c53712c696a0fe5b573284d85f7c36 to your computer and use it in GitHub Desktop.

Select an option

Save qbig/34c53712c696a0fe5b573284d85f7c36 to your computer and use it in GitHub Desktop.
Working with Unix pipes
package main

        import (
            "bufio"
            "fmt"
            "io"
            "os"
        )

        // WordCount takes a file and returns a map
        // with each word as a key and it's number of
        // appearances as a value
        func WordCount(f io.Reader) map[string]int {
            result := make(map[string]int)

            // make a scanner to work on the file
            // io.Reader interface
            scanner := bufio.NewScanner(f)
            scanner.Split(bufio.ScanWords)

            for scanner.Scan() {
                result[scanner.Text()]++
            }

            if err := scanner.Err(); err != nil {
                fmt.Fprintln(os.Stderr, "reading input:", err)
            }

            return result
        }

        func main() {
            fmt.Printf("string: number_of_occurrences\n\n")
            for key, value := range WordCount(os.Stdin) {
                fmt.Printf("%s: %d\n", key, value)
            }
        }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment