Linux里面uniq -c命令作用是什么?uniq 对排序好linuxuniq命令的内容进行去重
-c 显示输出中linuxuniq命令,在每行行首加上本行在文件中出现的次数 。
Linux系统sort和uniq命令联合使用给定两个文件 a.txt 和 b.txt linuxuniq命令 , 每行是一个记录(假设没有重复),要求输出两集合linuxuniq命令的交集、并集、差集,输出linuxuniq命令的结果只包括唯一项 。
交集定义为同时出现在两个文件中的记录项linuxuniq命令;
并集定义为出现在任何一个文件中的记录项;
差集( A-B )定义为出现在A中而且不出现在B中的记录;
对称差集定义为只出现在一个文件中的记录;
假设 a.txt 包括 a, c, b 三行 。假设 b.txt 包括 d, e, c, b 四行 。
交集,把两个文件放到一起排序,只输出次数多于一次的项:
$ sort a.txt b.txt | uniq -d
并集,把两个文件放到一起排序,重复的项只算一次:
$ sort a.txt b.txt | uniq
差集(A-B) , 把B的元素重复2份和A的元素放到一起排序,只输出出现一次的项:
$ sort a.txt b.txt b.txt | uniq -u
对称差 , 把两个文件放到一起排序,只输出出现一次的项:
$ sort a.txt b.txt | uniq -u
指定分隔符(-t)及基于哪一列(-k)、基于数值(-n) 、逆序(-r)进行排序
#排序之后删除linuxuniq命令了重复行,同时在行首位置输出该行重复的次数:
执行命令:sort testfile | uniq -c ,输出结果如下
#仅显示存在重复的行,并在行首显示该行重复的次数:
执行命令:sort testfile | uniq -dc,输出结果如下
#仅显示没有重复的行:
执行命令:sort testfile | uniq -u,输出结果如下
【shell】Linux删除文本重复行【linuxuniq命令的简单介绍】通常如果我们想获取一个文件里不重复的行的时候 , 我们可以直接通过 sort -u 命令,先把文件排序,然后去掉连续的重复行就行 。
可是 , 如果我们去掉重复行之后,还想保留文件原有的顺序,该怎么办呢?
虽然 Linux 下有个看上去似乎很有用的命令叫uniq,但事实上 uniq 命令仅仅只对连续的重复行有效 。
如果不排序,直接使用 uniq 命令是没有用的;使用 sort -u 的话,我们就丢失了文件原有的行的顺序了 。
一个终极的解决方案是使用 awk:
简要解释一下:awk 的基本执行流程是,对文件的每一行,做一个指定的逻辑判断,如果逻辑判断成立 , 则执行指定的命令;如果逻辑判断不成立,则直接跳过这一行 。
我们这里写的 awk 命令是!x[$0]++ , 意思是,首先创建一个 map 叫x,然后用当前行的全文$0作为 map 的 key,到 map 中查找相应的 value , 如果没找到,则整个表达式的值为真,可以执行之后的语句;如果找到了,则表达式的值为假,跳过这一行 。
由于表达式之后有++ , 因此如果某个 key 找不到对应的 value,该++操作会先把对应的 value 设成 0 , 然后再自增成 1 , 这样下次再遇到重复的行的时候,对应的 key 就能找到一个非 0 的 value 了 。
我们前面说过,awk 的流程是先判断表达式,表达式为真的时候就执行语句 , 可是我们前面写的这个 awk 命令里只有表达式,没有语句,那我们执行什么呢?原来,当语句被省略的时候,awk 就执行默认的语句,即打印整个完整的当前行 。就这样,我们通过这个非常简短的 awk 命令实现了去除重复行并保留原有文件顺序的功能 。
Linux文本操作常用命令在Linux系统里常用于文本查看、操作、统计的命令linuxuniq命令:
推荐阅读
- 如何word制作因果图,如何做因果图
- 个人如何创办电商,个人如何开电商
- 批量更新数据到sqlserver,一条sql实现批量更新数据
- 单机游戏行尸,单机游戏行尸走肉第四部游戏视频
- vb.net反编译 vb反编译器
- 苹果13能更新ios15吗,ios13可以升级ios14吗
- 什么是服务器程序,服务器的意思
- 微信没有视频号功能咋办,2021微信没有视频号怎么办
- 电子商务java平台代码 java 电商