• Linux中sort和uniq关于排序去重的那些用法


      相信在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



  • 相关阅读:
    Qt:绘制时,用线性渐变填充一个圆角矩形范围
    记录一个mysql数据迁移的坑
    idea中添加jar,maven有时候无法引入到jar
    img引入base64格式图片
    URL特殊符号转码_encodeURI/decodeURI
    [js] eval函数
    Modernizr
    判断对象上是否存在指定key
    Linux下格式化大于2T硬盘的方法
    win10 别人无法ping通本机设置
  • 原文地址:https://www.cnblogs.com/coderchuanyu/p/4194211.html
Copyright © 2020-2023  润新知