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
一起使用才能够达到所需要的结果。