package main import ( "bufio" "fmt" "log" "os" "strings" ) func main() { counts := make(map[string][]string) file := os.Args[1:] if len(file) == 0 { countLines(os.Stdin, counts) } else { for _, i := range file { f, err := os.Open(i) if err != nil { log.Print(err) } countLines(f, counts) f.Close() } } for lines, n := range counts { if len(n) > 1 { fmt.Printf("%v\t\"%s\"\n", n, strings.Trim(lines, " ")) } } } func contains(slice []string, file string) bool { for _, i := range slice { if i == file { return true } } return false } func countLines(f *os.File, counts map[string][]string) { input := bufio.NewScanner(f) for input.Scan() { cur := counts[input.Text()] if !contains(cur, f.Name()) { cur = append(cur, f.Name()) counts[input.Text()] = cur } } }