Linux【2】-管理文件-4-uniq
如果我排序完成了,想要将重复的资料仅列出一个显示,可以怎么做呢?
[root@www ~]# uniq [-ic]
选项与参数:
-i :忽略大小写字符的不同;
-c :进行计数
范例一:使用 last 将账号列出,仅取出账号栏,进行排序后仅取出一位;
[root@www ~]# last | cut -d ' ' -f1 | sort | uniq
范例二:承上题,如果我还想要知道每个人的登入总次数呢?
[root@www ~]# last | cut -d ' ' -f1 | sort | uniq -c
1
12 reboot
41 root
1 wtmp
# 从上面的结果可以发现 reboot 有 12 次, root 登入则有 41 次!
# wtmp 与第一行的空白都是 last 的默认字符,那两个可以忽略的!
这个指令用来将『重复的行删除掉只显示一个』,举个例子来说, 你要知道这个月份登入你主机的用户有谁,而不在乎他的登入次数,那么就使用上面的范例, (1)先将所有的数据列出;(2)再将人名独立出来;(3)经过排序;(4)只显示一个! 由于这个指令是在将重复的东西减少,所以当然需要『配合排序过的档案』来处理啰!
1. 取出两个文件的并集(重复的行只保留一份)
2. 取出两个文件的交集(只留下同时存在于两个文件中的文件)
3. 删除交集,留下其他的行
1. cat file1 file2 | sort | uniq > file3
2. cat file1 file2 | sort | uniq -d > file3
3. cat file1 file2 | sort | uniq -u > file3
三、讨论
2.1 两个文件的交集,并集
前提条件:每个文件中不得有重复行
-
取出两个文件的并集(重复的行只保留一份)
cat file1 file2 | sort | uniq > file3
-
取出两个文件的交集(只留下同时存在于两个文件中的文件)
cat file1 file2 | sort | uniq -d > file3
-
删除交集,留下其他的行
cat file1 file2 | sort | uniq -u > file3
2.3 一个文件去掉重复的行:
sort file |uniq
注意:重复的多行记为一行,也就是说这些重复的行还在,只是全部省略为一行!
sort file |uniq -u
上面的命令可以把重复的行全部去掉,也就是文件中的非重复行!
具体细节可以查看,cat,sort,uniq等命令的详细介绍
参考资料
- 鸟哥linux私房菜cut linux.vbird.org/linux_basic/0320bash.php#cut
- 长颈鹿Giraffe的博客 http://www.cnblogs.com/giraffe/p/3193085.html
- Bob’s Blog的博客 http://blog.csdn.net/exbob/article/details/6636255 (有不错的脚本)
- 鸟哥私房菜 http://linux.vbird.org/linux_basic/0320bash.php#paste
这里是一个广告位,,感兴趣的都可以发邮件聊聊:tiehan@sina.cn
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn