相信在Linux下对文件操作经常会用到sort和uniq命令,下面系统的介绍一下这两个命令的用法。

  sort命令是在Linux里非常有用,它将文件进行排序,并将排序结果标准输出。sort命令既可以从特定的文件,也可以从stdin中获取输入。

  语法

  sort(选项)(参数)

  选项

  -b:忽略每行前面开始出的空格字符;   

  -c:检查文件是否已经按照顺序排序;   

  -d:排序时,处理英文字母、数字及空格字符外,忽略其他的字符;   

  -f:排序时,将小写字母视为大写字母;   

  -i:排序时,除了040至176之间的ASCII字符外,忽略其他的字符;   

  -m:将几个排序号的文件进行合并;   

  -M:将前面3个字母依照月份的缩写进行排序;   

  -n:依照数值的大小排序;   

  -o<输出文件>:将排序后的结果存入制定的文件;   

  -r:以相反的顺序来排序;   

  -t<分隔字符>:指定排序时所用的栏位分隔字符;   

  +<起始栏位>-<结束栏位>:以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。

  参数

  文件:指定待排序的文件列表。

  实例

  sort将文件/文本的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。

  [root@mail text]# cat sort.txt   

  aaa:10:1.1   

  ccc:30:3.3   

  ddd:40:4.4   

  bbb:20:2.2   

  eee:50:5.5   

  eee:50:5.5   

  [root@mail text]# sort sort.txt   

  aaa:10:1.1   

  bbb:20:2.2   

  ccc:30:3.3   

  ddd:40:4.4   

  eee:50:5.5   

  eee:50:5.5

  忽略相同行使用-u选项或者uniq:

  [root@mail text]# cat sort.txt   

  aaa:10:1.1   

  ccc:30:3.3   

  ddd:40:4.4   

  bbb:20:2.2   

  eee:50:5.5   

  eee:50:5.5   

  [root@mail text]# sort -u sort.txt   

  aaa:10:1.1   

  bbb:20:2.2   

  ccc:30:3.3   

  ddd:40:4.4   

  eee:50:5.5   

  或者   

  [root@mail text]# uniq sort.txt   

  aaa:10:1.1   

  ccc:30:3.3   

  ddd:40:4.4   

  bbb:20:2.2   

  eee:50:5.5

  sort的-n、-r、-k、-t选项的使用:

  [root@mail text]# cat sort.txt   

  AAA:BB:CC   

  aaa:30:1.6   

  ccc:50:3.3   

  ddd:20:4.2   

  bbb:10:2.5   

  eee:40:5.4   

  eee:60:5.1   

  #将BB列按照数字从小到大顺序排列:   

  [root@mail text]# sort -nk 2 -t: sort.txt   

  AAA:BB:CC   

  bbb:10:2.5   

  ddd:20:4.2   

  aaa:30:1.6   

  eee:40:5.4   

  ccc:50:3.3   

  eee:60:5.1   

  #将CC列数字从大到小顺序排列:   

  [root@mail text]# sort -nrk 3 -t: sort.txt   

  eee:40:5.4   

  eee:60:5.1   

  ddd:20:4.2   

  ccc:50:3.3   

  bbb:10:2.5   

  aaa:30:1.6   

  AAA:BB:CC   

  # -n是按照数字大小排序,-r是以相反顺序,-k是指定需要爱排序的栏位,-t指定栏位分隔符为冒号

  uniq命令用于报告或忽略文件中的重复行,一般与sort命令结合使用。

  语法

  uniq(选项)(参数)

  选项

  -c或——count:  在每列旁边显示该行重复出现的次数;   

  -d或--repeated:  仅显示重复出现的行列;   

  -f<栏位>或--skip-fields=<栏位>:忽略比较指定的栏位;   

  -s<字符位置>或--skip-chars=<字符位置>:忽略比较指定的字符;   

  -u或——unique:仅显示出一次的行列;   

  -w<字符位置>或--check-chars=<字符位置>:指定要比较的字符。

  实例

  删除重复行:

  uniq file.txt
  

  sort file.txt | uniq
  

  sort -u file.txt

  只显示单一行:

  uniq -u file.txt
  

  sort file.txt | uniq -u

  统计各行在文件中出现的次数:

  sort file.txt | uniq -c

  在文件中找出重复的行:

  sort file.txt | uniq -d

  利用sort和uniq求两个文件的并集,交集和差集

  并集:cat file1.txt file2.txt | sort | uniq > file.txt

  交集:cat file1.txt file2.txt | sort | uniq -d >file.txt

  差集:求file1.txt相对于file2.txt的差集,可先求出两者的交集temp.txt,然后在file1.txt中除去temp.txt即可。

     cat file1.txt file2.txt | sort | uniq -d >temp.txt

     cat file1.txt temp.txt | sort | uniq -u >file.txt

最新文章

  1. Ubuntu-安装-theano+caffe-超详细教程
  2. 【BZOJ 4636】蒟蒻的数列
  3. 算法手记 之 数据结构(堆)(POJ 2051)
  4. Activity(一)
  5. 【转】java线程系列---Runnable和Thread的区别
  6. SQL Server 2008设置 开启远程连接
  7. R语言画曲线图
  8. Vue练手项目(包含typescript版本)
  9. Java基础方法整理
  10. Scrum冲刺阶段1
  11. 文档对象模型DOM
  12. django cookie与session组件
  13. 解决Redisson出现Failed to instantiate [org.redisson.api.RedissonClient]: Factory method &#39;create&#39; threw exception; nested exception is java.lang.ArrayIndexOutOfBoundsException: 0的问题
  14. Java堆外内存之突破JVM枷锁
  15. 敏捷团队的组织与管理--- MPD软件工作坊培训感想(下)
  16. 用Jetty 9.1运行Java WebSockets微服务
  17. tomcat启动超时, Server Tomcat v6.0 Server at localhost was unable to start within 45 seconds...
  18. 第14章 Linux账号管理与ACL权限设置
  19. c++ 修改stl set中的元素
  20. 单选框 复选框 隐藏之后,绑定的change事件在ie中失效的问题

热门文章

  1. mapInfo文件格式详解
  2. linux切换用户命令
  3. 每天一个Linux命令(59)wget命令
  4. 【HackerRank】Gem Stones
  5. python中编写无参数decorator
  6. Java中Arrays.sort()和Collections.sort()
  7. codeforces 439D 思维
  8. Crashlytics功能集成
  9. vijos 1250 最勇敢的机器人 分组背包+并查集
  10. html5学习笔记(audio)