一、uniq介绍
uniq是unix-like系统中一个过滤文本重复行的工具。uniq可以删除重复行,显示重复行的数量。并且可以只显示重复行数据,只显示非重复行数据,忽略字符或者字段比较是否重复。但是这个命令对于重复行的判断仅限于相邻行。因此uniq命令常常与sort一起使用。本文将详细讲解uniq的参数以及使用技巧。
二、uniq命令参数介绍
2.1 使用方法
uniq [option] filename
2.2 uniq参数详细介绍
参数解释:
-c显示重复行数量
-d 只显示重复行,每组显示第一个
-D 显示所有重复行-f跳过n个字段判断是否重复,下标从1开始--group
显示所有字段,使用空行分隔每一组
-i 忽略大小写比较重复行-s跳过n个字符判断是否重复,下标从1开始
-u 只显示非重复的行
-z 结束行是0byte,不是新行-w指定前n个字符判断是否重复
三、uniq应用案例
假设我们的案例数据保存的文件test.txt中,案例数据如下:
数据解释: 姓名 科目 分数
数据使用空格分隔。
说明一下 sJack Python 95 这条数据在3.1 -3.4,以后这条数据修改为:bJack Python 95
Tom Scala 30 Tom Scala 30 Tom Java 30 aJack Python 95 bJack Python 95 Jack Spring 95 Mike Java 95 Linda Linux 85 Linda PHP 66Linda Linux 85 XY PHP 66XY Java 55Mike Scala 30SS Shell 99
3.1 查看test.txt文件中相邻行数据重复的数量
uniq -c test.txt
3.2 查看test.txt文件中数据重复的数量
sort test.txt | uniq -c
3.3 查看test.txt文件中相邻行重复的数据
cat test.txt | uniq -d
也可以使用awk来解决这个问题
uniq -c test.txt | awk '$1 > 1 {print} '或者uniq -c test.txt | awk '{if($1 > 1) print} '
3.4 查看test.txt文件中重复行的数据
sort test.txt | uniq -d
也可以使用awk来解决
sort test.txt | uniq -c | awk '$1 > 1 {print}'或者sort test.txt | uniq -c | awk '{if($1 > 1) print }'# 不显示重复个数sort test.txt | uniq -c | awk '{if($1 > 1) print $2,$3,$4 }'
3.5 查看test.txt文件中相邻行不重复的数据
cat test.txt | uniq -u
也可以使用awk解决
uniq -c test.txt | awk '$1 == 1 {print}'或者uniq -c test.txt | awk '{if($1 == 1) print $2,$3,$4}'
3.6 查看test.txt文件中不重复的行
sort test.txt | uniq -u 或者sort test.txt | uniq -c | awk '{if($1 == 1) print}'
3.7 忽略每行第一个字符,找出test.txt文件中具有相同行的数据
sort test.txt | uniq -s 1 -d
3.8 忽略每行第一个字段,找出test.txt文件中具有相同行的数据
sort -k2 test.txt | uniq -f 1 -d
3.9 查看test.txt文件中学生选择最多的科目(去重数据)
sort -k2 test.txt | uniq | awk '{print $2}' | uniq -c | sort -k1r | head -n 1
3.10 查看test.txt文件中所有的重复行
sort test.txt | uniq -D
3.11 查看前3个字符相同的数据
sort test.txt | uniq -w 3 -d