awk ‘! a[$0]++’ 去重
awk ‘! a[$0]++’ 怎么理解?
这是一个非常经典的去重复项的awk语句,虽然短小,不过涉及到了不少知识点,下面一一解读:
<1> :”!” 即非。
<2>:a[$0],以$0为数据下标,建立数组a
<3>:a[$0]++,即给数组a赋值,a[$0]+=1
<4> :那么组合起来,awk是怎么执行!a[$0]++的呢?我用一个实际例子来解释:
cat file
111
222
111
222
333 awk '{print a[$0],!a[$0]++,a[$0],!a[$0],$0}' file
1 1 0 111
1 1 0 222
1 0 2 0 111
1 0 2 0 222
1 1 0 333
但pattern为1即为真时,执行action,此时action为空执行print $0
由于执行了++,它的初值变成了0【执行++后数组被定义为int型,初始值就为0】
默认空char型变量未null,空int型变量为0
第一次肯定是不同的行,所有不会有重复
但遇到重复的行是,数组的下标相同,此时数组的value为0,执行++后,数组值为1,经取反后
数组为0,action不执行【即不打印】
awk ‘! a[$0]++’ 去重的更多相关文章
- linux上文件内容去重的问题uniq/awk
1.uniq:只会对相邻的行进行判断是否重复,不能全文本进行搜索是否重复,所以往往跟sort结合使用. 例子1: [root@aaa01 ~]# cat a.txt 12 34 56 12 [root ...
- awk去重以某列重复的行
[root@localhost cc]# cat 2.txt adc 3 5 a d aa 3 adfa d ba 3 adf 去重第一列重复的行: [root@localhost cc]# cat ...
- linux上文件内容去重的问题uniq/awk 正则表达过滤操作
.uniq:只会对相邻的行进行判断是否重复,不能全文本进行搜索是否重复,所以往往跟sort结合使用. 例子1: [root@aaa01 ~]# cat a.txt 12 34 56 12 [root@ ...
- 精通awk系列(9):修改字段或NF引起的$0重新计算
回到: Linux系列文章 Shell系列文章 Awk系列文章 修改字段或NF值的联动效应 注意下面的分割和计算两词:分割表示使用FS(field Separator),计算表示使用预定义变量OFS( ...
- 删除所有空白列 cat yum.log | awk '{$1=$2=$3=$4=null;print $0}'>>yum.log1 sed ‘s/[ \t]*$//g' 删除所有空格 sed -i s/[[:space:]]//g yum.log
2.删除行末空格 代码如下: 删除所有空白列 cat yum.log | awk '{$1=$2=$3=$4=null;print $0}'>>yum.log1 sed 's/[ \t]* ...
- 基本shell编程【3】- 常用的工具awk\sed\sort\uniq\od
awk awk是个很好用的东西,大量使用在linux系统分析的结果展示处理上.并且可以使用管道, input | awk '' | output 1.首先要知道形式 awk 'command' fi ...
- Linux查找命令:grep,awk,sed
grep grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具 ...
- awk 统计出现次数--转
知识点: 1)数组 数组是用来存储一系列值的变量,可通过索引来访问数组的值. Awk中数组称为关联数组,因为它的下标(索引)可以是数字也可以是字符串. 下标通常称为键,数组元素的键和值存储在Awk程序 ...
- Linux命令之awk数组使用范例
目录 取ifconfig bond0的IP地址 1 命令如下: 2 统计apache日志单IP访问请求数排名 2 第一种方法 2 第二种方法 2 统计域名访问量 3 ...
随机推荐
- Windows下Java环境变量配置
新建: JAVA_HOMEC:\Program Files\Java\jdk1.8.0_25 新建或添加到开头: PATH %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; C ...
- Spring Boot项目构建
环境准备 IDEA+JDK 1.8+Maven+mysql+SSM 1.使用Spring Boot框架可以大大加速Web应用的开发过程,首先在Maven项目依赖中引入spring-boot-start ...
- 大数据Hadoop学习之了解Hadoop(1)
关于大数据,一看就懂,一懂就懵. 大数据的发展也有些年头了,如今正走在风口浪尖上,作为小白,我也来凑一份热闹. 大数据经过多年的发展,有着不同的实现方案和分支,不过,要说大数据实现方案中的翘楚,那就是 ...
- sqlserver 重置标识列
重置标识信息:DBCC CHECKIDENT('表名', RESEED,0) 检查标识信息:DBCC CHECKIDENT('SysModule', NORESEED)
- CTF---Web入门第十四题 忘记密码了
忘记密码了分值:20 来源: Justatest 难度:中 参与人数:7706人 Get Flag:2232人 答题人数:2386人 解题通过率:94% 找回密码 格式:SimCTF{ } 解题链接: ...
- Codeforces Round #442 (Div. 2)
A. Alex and broken contest time limit per test 2 seconds memory limit per test 256 megabytes input s ...
- Linux /bin, /sbin, /usr/bin, /usr/sbin 区别
在linux下我们经常用到的四个应用程序的目录是:/bin./sbin./usr/bin./usr/sbin bin: bin为binary的简写主要放置一些系统的必备执行档例如:cat.cp ...
- flume1.8 开发指南学习感悟
概述: Apache Flume是一个分布式.可用的系统,用于从许多不同的sources有效的收集并移动大量日志数据用于集中存储数据. 架构及数据流动模型: flume实际上就是一个Agent.Age ...
- java构建学生管理系统(一)
用java搭建学生管理系统,重要还是对数据库的操作,诸如增删改查等. 1.基本的功能: 老师完成对学生信息的查看和修改,完成对班级的信息的概览. 学生可以看自己的成绩和对自己信息的修改. 学生和老师有 ...
- 慕课网-前端JavaScrpt基础面试技巧-学习笔记
章节目录: JS基础知识(上)--讲解 JS 基础语法相关的面试题,分析原理以及解答方法.这一章节讲解了基础知识的第一部分:变量的类型和计算.以及JS "三座大山" -- 原型.作 ...