[日常] Go语言圣经-查找重复行
从标准输入中读取数据
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语言圣经-查找重复行的更多相关文章
- linux shell脚本查找重复行/查找非重复行/去除重复行/重复行统计
转自:http://blog.sina.com.cn/s/blog_6797a6700101pdm7.html 去除重复行 sort file |uniq 查找非重复行 sort file |uniq ...
- Sublime文本排序&查找重复行&删除重复行
排序 按F9或者选择菜单:Edit > Sort Lines,对每行文本进行排序 查找重复行 排序好后,按Ctrl+F,调出查找面板 查找字符串: ^(.+)$[\r\n](^\1$[\r\n] ...
- [日常] Go语言圣经--接口约定习题
Go语言圣经-接口1.接口类型是对其它类型行为的抽象和概括2.Go语言中接口类型的独特之处在于它是满足隐式实现的3.Go语言中还存在着另外一种类型:接口类型.接口类型是一种抽象的类型4.一个类型可以自 ...
- [日常] Go语言圣经-错误,函数值习题
Go语言圣经-错误 1.panic异常.panic是来自被调函数的信号,表示发生了某个已知的bug 2.任何进行I/O操作的函数都会面临出现错误的可能 3.错误是软件包API和应用程序用户界面的一个重 ...
- [日常] Go语言圣经--结构体,JSON习题
Go语言圣经-结构体 1.结构体是一种聚合的数据类型,是由零个或多个任意类型的值聚合成的实体 2.通常一行对应一个结构体成员,成员的名字在前类型在后,不过如果相邻的成员类型如果相同的话可以被合并到一行 ...
- [日常] Go语言圣经--复合数据类型,数组习题
go语言圣经-复合数据类型 1.以不同的方式组合基本类型可以构造出来的复合数据类型 2.四种类型——数组.slice.map和结构体 3.数组是由同构的元素组成——每个数组元素都是完全相同的类型——结 ...
- [日常] Go语言圣经--复数,布尔值,字符串习题
go语言圣经-复数 1.我们把形如a+bi(a,b均为实数)的数称为复数,其中a称为实部,b称为虚部,i称为虚数单位.两种精度的复数类型:complex64和complex128,分别对应float3 ...
- [日常] Go语言圣经--作用域,基础数据类型,整型
go语言圣经-作用域 1.一个声明语句将程序中的实体和一个名字关联,比如一个函数或一个变量 2.一个变量的生命周期是指程序运行时变量存在的有效时间段;声明语句的作用域对应的是一个源代码的文本区域,它是 ...
- [日常] go语言圣经-声明,变量,赋值,类型,包和文件习题
go语言圣经-声明1.四种类型的声明语句:var.const.type和func,分别对应变量.常量.类型和函数实体对象的声明2.包一级声明语句声明的名字可在整个包对应的每个源文件中访问,局部声明的名 ...
随机推荐
- c# 1-2+3-4.....求和
找规律: 下界:1 上界:n class Program { static void Main(string[] args) { ; ; i <=; i++) { ==) { sum -= i; ...
- 前端入门CSS(3)
day60 不透明度 opacity()\ opacity (不透明度) 1. 取值0~1 2. 和rgba()的区别: ...
- nginx 开启GZIP、域名指向index.html
nginx 虽然默认开启了gzip压缩,但是有关压缩文件.压缩效率没有开启,在建设我的(个人博客)[www.fayinme.cn]中,直观的感受到gzip带来的访问速度提升的快感. 如何开启GZIP ...
- vsftp小记
安装一个vsftp都有问题(Version: 3.0.2-14ubuntu1),提示530 错误,之后修改配置如下(红色): # cat /etc/pam.d/vsftpdauth required ...
- POJ 2389
#include <iostream> #include <algorithm> #include <string> #define MAXN 300 using ...
- POJ 1287
#include<iostream> #include<stdio.h> #define MAXN 100 #define inf 1000000000 using names ...
- 前端必备:FastStoneCapture 和 Licecap &&& mingw c++ 编译执行
端必备:FastStoneCapture 和 Licecap FastStoneCapture这个软件非常小,只有2M多,并且其功能很强大,包括截图,录制视频,量尺,取色等等,对于前端工程师绝对是必备 ...
- Java之集合(三)ArrayList
转载请注明源出处:http://www.cnblogs.com/lighten/p/7291339.html 1.前言 本章介绍List中最常用的一个类--ArrayList.在第一章中已经介绍了Li ...
- MySQL 5.7.14 win10安装
1. 下载: http://dev.mysql.com/downloads/mysql/
- C# 对象相等性判断和同一性判断
在日常开发中经常需要编写代码比较不同的对象.例如,有时需要将对象都放到一个集合中,并编写代码对集合中的对象进行排序.搜索或者比较. System.Object类有两个Equals方法,如下: 1.实例 ...