awk处理重复行错误分析
[root@localhost ~]#cat 0712
YRSD2-1-11
YRSD2-2-18
YRSD1-1-8
YRSD1-1-18
YRSD1-1-20
YRSD1-1-25
YRSD1-2-38
YRSD1-2-39
YRSD1-2-44
YRSD1-2-48
YRSD1-2-43
YRSD1-3-58
YRSD1-3-59
YRSD1-4-67
YRSD1-4-68
YRSD1-4-70
YRSD1-4-71
YRSD1-3-52
YRSD4-1-5
YRSD3-1-7
YRSD3-1-22
YRSD3-1-28
YRSD3-2-37
YRSD3-2-50
YRSD3-2-53
YRSD3-2-55
YRSD6-1-1
YRSD6-1-5
YRSD6-1-15
YRSD6-2-28
YRSD6-2-32
YRSD6-2-36
YRSD5-1-7
YRSD5-1-22
YRSD5-1-23
YRSD5-1-24
YRSD5-1-25
YRSD5-1-26
YRSD5-2-33
YRSD5-2-37
YRSD5-2-42
YRSD5-2-51
YRSD5-2-54
YRSD5-2-53 YRSD1-1-18
YRSD1-2-38
YRSD1-2-44
YRSD1-2-48
YRSD1-4-67
YRSD1-4-68
YRSD2-1-11
YRSD2-2-18
YRSD3-1-22
YRSD3-1-28
YRSD5-1-22
YRSD5-1-25
YRSD5-2-37
YRSD5-2-42
YRSD5-2-54
YRSD6-1-1
YRSD6-1-15
想将重复的行打印出来,结果搞错了,闲来无聊想想为什么会有这样的结果,算是对awk的加深印象
[root@localhost ~]#awk 'a[$0]++{for(i in a)print i,a[i]}' 0712 | wc -l
810
解析
a[$0]++结果为真时,执行action,所以第一遍不重复的时候,将数组存储
然后每次遇到重复的行,pattern结果为真,执行一次action,一共18个重复行,执行18次,每次结果为45行,共计45*18=810行
顺序对结果也有影响,对计数有影响
[root@localhost ~]#awk '++a[$0]{for(i in a)print i,a[i]}' 0712 | wc -l
1845
解析
因为++a[$0]第一次就有结果了,所以第一次就将a[第一行]打印出来,
第二行时,将第一行、第二行打印出来
第三行时,将第一二三行打印出来
以此类推
不重复行为45行
所以结果为45*(1+45)/2=1035
从第46行开始重复,且每次打印时数组均为45项,即45*18=810
1035+810=1845
over
[root@localhost ~]#awk 'a[$0]++;END{for(i in a)print i,a[i]}' 0712 | wc -l
63
awk只执行pattern对空间的内容没有影响,所以使用END模块也就没有效果
百度百科awk
其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令。花括号 ({}) 不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。
所以正确的END模式如下:
[root@localhost ~]#awk '{a[$0]++};END{for(i in a)print i,a[i]}' 0712 | wc -l
45
awk处理重复行错误分析的更多相关文章
- awk除去重复行
awk去除重复行,思路是以每一行的$0为key,创建一个hash数组,后续碰到的行,如果数组里已经有了,就不再print了,否则将其print 测试文件: 用awk: 用sort+uniq好像出错了: ...
- linux 下删除重复行-- uniq 与 awk
$ cat file liw liw liw hdsui mdksjd liw $ cat file | uniq -u # 只删除相邻的,不保留重复行 hdsui mdksjd liw $ cat ...
- 【shell】awk按域去除重复行
首先解释一下什么叫“按域去除重复行”: 有的时候我们需要去除的重复行并不是整行都重复,两行的其中一列的元素相同我们有的时候就需要认定这两行重复,因此有了今天的内容. 去除重复行shell有一个原生命令 ...
- linux用命令删除重复行
文本处理时,经常要删除重复行,下面是三种方法 第一,用sort+uniq,注意,单纯uniq是不行的. sort -n test.txt | uniq 第二,用sort+awk命令,注意,单纯awk同 ...
- Linux合并文件、去除重复行的命令
Linux合并文件命令: awk '{printf("%s\n",$0)}' YQ-*101?.txt > 123.txt linux去除重复行命令:cat YQ-10 ...
- Linux删除重复行 排序和不排序的做法--转载
本文部分翻译自这里,来自 Jadu Saikia 的博客,这个博客上有很多非常有用的小技巧,有空可以多看看. 通常如果我们想获取一个文件里不重复的行的时候,我们可以直接通过 sort -u 命令,先把 ...
- Linux删除重复行
本文转自http://blog.csdn.net/ithomer/article/details/6926325 文本处理时,经常要删除重复行,下面是三种方法 第一,用sort+uniq,注意,单纯u ...
- shell 删除文本中的重复行
三种常见方法:第一,用sort+uniq,注意,单纯uniq是不行的. shell> sort -k2n file | uniq > a.out 这里我做了个简单的测试,当file中的重复 ...
- SQL Server删除重复行的6个方法
SQL Server删除重复行是我们最常见的操作之一,下面就为您介绍六种适合不同情况的SQL Server删除重复行的方法,供您参考. 1.如果有ID字段,就是具有唯一性的字段 delect ta ...
随机推荐
- 【机器学习学习】SKlearn + XGBoost 预测 Titanic 乘客幸存
Titanic 数据集是从 kaggle下载的,下载地址:https://www.kaggle.com/c/titanic/data 数据一共又3个文件,分别是:train.csv,test.csv, ...
- 使用quartz实现不重启服务器修改自定义配置
为了方便维护系统,开发中通常会设置一些自定义参数,写在单独的配置文件里,需要调整时可直接登录服务器修复配置文件,而不需要修改程序.但尴尬的是,web服务器并不会自动重新加载配置文件,重启服务器又会中断 ...
- cs231n spring 2017 lecture1 Introduction to Convolutional Neural Networks for Visual Recognition 听课笔记
1. 生物学家做实验发现脑皮层对简单的结构比如角.边有反应,而通过复杂的神经元传递,这些简单的结构最终帮助生物体有了更复杂的视觉系统.1970年David Marr提出的视觉处理流程遵循这样的原则,拿 ...
- web前端性能优化总结
网站的划分一般为二:前端和后台.我们可以理解成后台是用来实现网站的功能的,比如:实现用户注册,用户能够为文章发表评论等等.而前端呢?其实应该是属于功能的表现.并且影响用户访问体验的绝大部分来自前端页面 ...
- AtCoder Regular Contest 082
我都出了F了……结果并没有出E……atcoder让我差4分上橙是啥意思啊…… C - Together 题意:把每个数加1或减1或不变求最大众数. #include<cstdio> #in ...
- UVALive 3882 - And Then There Was One【约瑟夫问题】
题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...
- c++(查找)
无论是数据库,还是普通的ERP系统,查找功能数据处理的一个基本功能.数据查找并不复杂,但是如何实现数据又快又好地查找呢?前人在实践中积累的一些方法,值得我们好好学些一下.我们假定查找的数据唯一存在,数 ...
- angular2 路由
路由是个模块,命令行生成:ng generate module routerTest; 自己组建: 路由模块说明: Routes:路由配置,路由配置文件类型.比如:const routing:Rout ...
- Vs自定义设置
1.固定选项卡独立行显示设置 效果如下 2.语言设置 可以从官网寻找所需版本语言包 https://my.visualstudio.com/downloads 3.代码段设置 可以对现有的进行一些改造 ...
- Ajax及异步操作
之前我们使用的是jQuery的Ajax,这是一种极为便捷的Ajax操作方式,但是我们还需要对Ajax技术进行进一步的了解. <input type="text" id=&qu ...