sort - uniq 排序和去重


sort - sort lines of text files(对文本文件的行进行排序)

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

格式:
sort [OPTION]... [FILE]...

OPTION:

  • -u,--unique :去重
  • -r,--reverse :降序排列,不加sort命令默认升序
  • -o, --output=FILE :将排序结果保存至文件中,也可使用重定向工具
  • -n, --numeric-sort :根据数值排序
  • -t, --field-separator=SEP :指定特定分隔符,默认以空格为分隔符。与cut -d一样一样的
  • -k, --key=KEYDEF :指定特定列做为排序,默认忽略开头空白字符。与cut -f一样一样的。
  • -M, --month-sort :根据月份进行排序,支持英文缩写格式:Jan
  • -b, --ignore-leading-blanks :忽略每一行前面的所有空白部分,从第一个可见字符开始比较
  • -f, --ignore-case :忽略大小写

示例:

$ awk -F'|' '{print $2}' nginx_access.log | uniq -c  | sort -n -r | head -n 10   #查询访问次数前10的ip地址。uniq -c 表示统计各行在文件中出现的次数
   2582 120.26.40.76
    826 120.26.40.76
    716 120.26.40.76
    525 120.26.40.76
    424 120.26.40.76
    325 120.26.40.76
    235 120.26.40.76
    233 120.26.40.76
    226 120.26.40.76
    120 120.26.40.76


uniq - report or omit repeated lines(报告或省略重复的行)

描述:

uniq 命令删除文件中的重复行。uniq 命令读取由 InFile 参数指定的标准输入或文件。该命令首先比较相邻的行,然后除去第二行和该行的后续副本。重复的行一定相邻。(在发出 uniq 命令之前,请使用 sort 命令使所有重复行相邻。uniq命令这种方式估计是想节省系统资源)最后,uniq 命令将最终单独的行写到标准输出或由 OutFile 参数指定的文件。InFile 和 OutFile 参数必须指定不同的文件。

格式:
uniq [OPTION]... [InFile [OutFile]]

OPTION:

  • -c :在输出行前面加上每行在文件中出现的次数
  • -d :仅显示重复行
  • -u :仅显示不重复的行

示例:

$ cat fruit.txt 
apple
banana
orange
apple
$ uniq fruit.txt  #可以看到apple不是邻近的,所以无法去重
apple
banana
orange
apple
$ uniq -d fruit.txt   
$
$ sort fruit.txt   #先排序,将相同的行安排在一起
apple
apple
banana
orange    
$ sort fruit.txt | uniq  #排序后,去重
apple
banana
orange


$ awk -F'|' '{print $2}'nginx_access.log | sort -n  |uniq -c | sort -n | tail -n 10     #只有先sort后在uniq才能生效
     28 122.192.13.58
     31 183.212.188.57
     31 223.104.4.82
     35 223.104.4.61
     36 112.20.81.240
     71 183.209.48.38
     86 122.96.43.243
    216 183.208.16.53
    616 49.77.231.174
   6268 120.26.40.76

总结:
uniq必须得和sort一起使用才能够达到所需要的结果。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM