Linux基础学习教程Linux系统

Linux 基础教程 17-基本命令sort和uniq

2017-04-22  本文已影响28人  Surpassme

sort

  在计算机中通常会存储很多各种各样的文件,里面甚至会有大量的数据记录,如果这些数据能以某种顺序进行排列,那么在日后的数据维护和查找将会变得非常容易。在Windows操作系统中可进行排序的工具有很多,如MS Excel/SQL Server等,而在Linux中常用的排序命令非sort莫属。sort命令将输入文件当成是由多条记录组成的数据流,可变宽度的字段组成并以换行符做定界符。

基本语法

sort [参数] [要排序的文件]

主要参数如下所示:

参数 功能
-c 检查文件是否已经按照顺序排序
-k 指定排序的域
-m 合并已排序的文件
-n 按数字大小进行排序
-o [输出文件] 将排序后的文件输出到指定文件,相当于输出重定向到指定文件
-r 将排序结果以逆向显示
-t [分隔符] 指定排序时所用的分隔符,默认为空格符
-u 去掉结果中的重复项

sort示例

从上面的示例中,可以看到尽管我们想按照域2数字大小进行排序,而实际情况仍然是按字符来进行排序的。解决方案请看下面的-n参数。

-n参数一般不会单独使用,通常与参数-k结合使用,放在域号之后。如-k2n就表示指定以第2个域且按数字大小进行排序。

通过该示例,其实我们可以总结出-o参数与Shell中的I/O重定向功能一样。

注意排序前和排序后合并的区别

uniq

  uniq命令用于去掉文件中的重复项,一般与sort命令结合使用,作用类似于sort -u,但也有一些区别。

基本语法

uniq [参数] [输入文件] [输出文件]

主要参数如下所示:

参数 功能
-c 输出每行在文件中重复的次数
-d 仅输出重复出现的记录,每个重复记录仅出现一次(连续重复时)
-u 仅显示没有重复的记录

-d和-u作用刚好相反

sort -u与uniq区别

  在了解基本的语法和参数之后,我们先来看看两者的区别,示例如下所示:


17-9 uniq与sort-u区别_c2i.jpg

从上面的示例可以总结出两者的主要区别如下:

  • uniq:去掉的重复行必须是连续重复出现的行,中间不能出现其他文本行
  • sort -u:将去掉所有重复的行

uniq示例

如上图所示,前面第一列列出每次重复的次数,而且是连续的行重复次数,如果是分开重复的话,将再做一次统计。

从上图示例可以看出,-d参数将存在连续重复的数据显示出来了,而John+21+Male+Russia虽然也存在重复,但却不是连续,因此未进行显示。

-u是将没有重复的数据显示出来,但为什么显示最后两行依然是重复了,请大家思考一下为什么?

本文同步在微信订阅号上发布,如各位小伙伴们喜欢我的文章,也可以关注我的微信订阅号:woaitest,或扫描下面的二维码添加关注:

MyQRCode.jpg
上一篇 下一篇

猜你喜欢

热点阅读