从标准输入中读取数据

1.if语句条件两边也不加括号,但是主体部分需要加{}

2.map存储了键/值(key/value)的集合,对集合元素,提供常数时间的存、取操作,map[string]int ==> key的类型string和value的类型int

3.内置函数make创建空map, counts := make(map[string]int)

4.bufio包Scanner类型读取输入并将其拆成行或单词input := bufio.NewScanner(os.Stdin) 短变量声明一个input变量

5.调用input.Scan(),读入下一行,在读到一行时返回true,不再有输入时返回false

6.fmt.Printf函数对一些表达式产生格式化输出

注意:

go语言中的input.Scan() 停止输入是

EOF

终端情况下请使用 ctrl+d

文件的是直接

cat input | go run main.go

dup1,go

package main

import (
"bufio"
"fmt"
"os"
) func main() {
content := make(map[string]int)
input := bufio.NewScanner(os.Stdin)
for input.Scan() {
content[input.Text()]++
}
for line, n := range content {
if n >= 1 {
fmt.Printf("%d \t %s \n", n, line)
}
}
}

  

从文件中读取数据

1.os.Open函数返回两个值。第一个值是被打开的文件(*os.File)

2.os.Open返回的第二个值是内置error类型的值,如果不等于内置值nil(NULL)说明出错了

3.使用fmt.Fprintf表示打印任意类型默认格式值的动词%v

4.map是一个由make函数创建的数据结构的引用,作为参数传递给某函数时相当于引用传递

package main

import (
"bufio"
"fmt"
"os"
) func main() {
content := make(map[string]int)
files := os.Args[1:] //获取命令行参数里的文件路径
if len(files) == 0 {
//从标准输入中读取数据
countLines(os.Stdin, content)
} else {
//从文件中读取数据
//如果有多个文件
for _, path := range files {
f, err := os.Open(path) //读取文件
//读取出错
if err != nil {
fmt.Fprintf(os.Stderr, "dup2:%v \n", err)
continue
}
countLines(f, content)
//注意方法名的大小写
f.Close()
}
}
for line, n := range content {
if n > 1 {
fmt.Printf("%d\t%s\n", n, line)
}
}
} //声明一个函数,实参类型:*os.File,content map[string]int
func countLines(f *os.File, content map[string]int) {
input := bufio.NewScanner(f)
for input.Scan() {
content[input.Text()]++
}
}
~

  

一口气把全部输入数据读到内存中,一次分割为多行,然后处理它们

1.ReadFile函数(来自于io/ioutil包),其读取指定文件的全部内容,返回一个字节切片(byte slice),必须把它转换为string

2.strings.Split函数把字符串分割成子串的切片(来自于strings包)

package main

import (
"fmt"
"io/ioutil"
"os"
"strings"
) func main() {
content := make(map[string]int)
files := os.Args[1:] //获取命令行参数里的文件路径
//从文件中读取数据
//如果有多个文件
for _, path := range files {
data, err := ioutil.ReadFile(path) //读取文件
//读取出错
if err != nil {
fmt.Fprintf(os.Stderr, "dup3:%v \n", err)
continue
}
msgs := strings.Split(string(data), "\n")
for _, msg := range msgs {
content[msg]++
}
}
for line, n := range content {
if n > 1 {
fmt.Printf("%d\t%s\n", n, line)
}
}
}

  

[日常] Go语言圣经-查找重复行的更多相关文章

  1. linux shell脚本查找重复行/查找非重复行/去除重复行/重复行统计

    转自:http://blog.sina.com.cn/s/blog_6797a6700101pdm7.html 去除重复行 sort file |uniq 查找非重复行 sort file |uniq ...

  2. Sublime文本排序&查找重复行&删除重复行

    排序 按F9或者选择菜单:Edit > Sort Lines,对每行文本进行排序 查找重复行 排序好后,按Ctrl+F,调出查找面板 查找字符串: ^(.+)$[\r\n](^\1$[\r\n] ...

  3. [日常] Go语言圣经--接口约定习题

    Go语言圣经-接口1.接口类型是对其它类型行为的抽象和概括2.Go语言中接口类型的独特之处在于它是满足隐式实现的3.Go语言中还存在着另外一种类型:接口类型.接口类型是一种抽象的类型4.一个类型可以自 ...

  4. [日常] Go语言圣经-错误,函数值习题

    Go语言圣经-错误 1.panic异常.panic是来自被调函数的信号,表示发生了某个已知的bug 2.任何进行I/O操作的函数都会面临出现错误的可能 3.错误是软件包API和应用程序用户界面的一个重 ...

  5. [日常] Go语言圣经--结构体,JSON习题

    Go语言圣经-结构体 1.结构体是一种聚合的数据类型,是由零个或多个任意类型的值聚合成的实体 2.通常一行对应一个结构体成员,成员的名字在前类型在后,不过如果相邻的成员类型如果相同的话可以被合并到一行 ...

  6. [日常] Go语言圣经--复合数据类型,数组习题

    go语言圣经-复合数据类型 1.以不同的方式组合基本类型可以构造出来的复合数据类型 2.四种类型——数组.slice.map和结构体 3.数组是由同构的元素组成——每个数组元素都是完全相同的类型——结 ...

  7. [日常] Go语言圣经--复数,布尔值,字符串习题

    go语言圣经-复数 1.我们把形如a+bi(a,b均为实数)的数称为复数,其中a称为实部,b称为虚部,i称为虚数单位.两种精度的复数类型:complex64和complex128,分别对应float3 ...

  8. [日常] Go语言圣经--作用域,基础数据类型,整型

    go语言圣经-作用域 1.一个声明语句将程序中的实体和一个名字关联,比如一个函数或一个变量 2.一个变量的生命周期是指程序运行时变量存在的有效时间段;声明语句的作用域对应的是一个源代码的文本区域,它是 ...

  9. [日常] go语言圣经-声明,变量,赋值,类型,包和文件习题

    go语言圣经-声明1.四种类型的声明语句:var.const.type和func,分别对应变量.常量.类型和函数实体对象的声明2.包一级声明语句声明的名字可在整个包对应的每个源文件中访问,局部声明的名 ...

随机推荐

  1. java入门——第一个java程序

    来源:https://course.tianmaying.com/java-basic%2Bjava-hello-world# java的基础特征 1 Java是一种大小写敏感的语言 2 程序的文件名 ...

  2. Weekly Contest 128

    1012. Complement of Base 10 Integer Every non-negative integer N has a binary representation.  For e ...

  3. String-680. Valid Palindrome II

    Given a non-empty string s, you may delete at most one character. Judge whether you can make it a pa ...

  4. 《JAVA与模式》之桥梁模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述桥梁(Bridge)模式的: 桥梁模式是对象的结构模式.又称为柄体(Handle and Body)模式或接口(Interface)模式. ...

  5. 用 TensorFlow 实现 k-means 聚类代码解析

    k-means 是聚类中比较简单的一种.用这个例子说一下感受一下 TensorFlow 的强大功能和语法. 一. TensorFlow 的安装 按照官网上的步骤一步一步来即可,我使用的是 virtua ...

  6. iOS---UICollectlionView 的使用

    UICollectlionView继承自UIScrollerview,跟tableview的使用很相似. 下面是UIcollectionView的一些属性和代理方法. #import "Vi ...

  7. 【NOIP2013】 华容道 bfs预处理+bfs

    这一题我们考虑一个最裸的算法: 我们设$dp[i][j][k][l]$表示当前棋子在$(i,j)$且空格在$(k,l)$时的最小步数 然后显然随便转移一下就好了,时间复杂度为$O(q(nm)^2)$. ...

  8. Window - 浏览器对象模型

    浏览器对象模型 (BOM) 浏览器对象模型(Browser Object Model (BOM))尚无正式标准. 由于现代浏览器已经(几乎)实现了 JavaScript 交互性方面的相同方法和属性,因 ...

  9. Numpy 数组的切片操作

    实例+解释如下(表格):关键是要明白python中数组的下标体系.一套从左往右,一套从右往左. 1 import numpy as np 2 import sys 3 4 def main(): 5 ...

  10. OpenRefine导入CSV文件,数据清理后导出JSON格式

    第一步:选择要转换的CSV文件. 第二步:选择以逗号分割,并创建项目. 第三步:编辑,去掉特殊字符 Edit Cells > Transform... 第四步:导出文件,选择“Templatin ...