美文网首页Linux基础学习教程Linux系统
Linux 基础教程 17-基本命令sort和uniq

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

作者: Surpassme | 来源:发表于2017-04-22 22:11 被阅读28次

sort

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

基本语法

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

主要参数如下所示:

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

sort示例

  • 1、-t参数
      sort命令对文件排序是分域的。默认的域分隔符是空格符,而-t参数可以指定排序所用的分隔符(相当于根据指定的分隔符先进行分列,再根据默认域排序)。示例如下所示:

    17-1 sort-t参数示例_c2i.jpg
  • 2、-k参数
      sort命令默认情况下是按第1个域进行排序的。如果不想按照默认的域进行排序,该怎么办?sort命令提供了一个参数 -k ,该参数可以按指定的域进行排序。sort命令以数字 1 代表第1域,2代表第2域,依次类推。下面的示例将演示按第3域进行排序,如下所示:

    17-2 sort-k参数_c2i.jpg

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

  • 3、-n参数
      在一些情况下,我们需要按照数字大小来进行排序,而sort默认是按字符串进行排序。针对这种情况,我们可以使用参数 -n来达到目的。
    17-3 sort-n参数_c2i.jpg

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

  • 4、-r参数
      通常情况我们排序都是按正向排序,如数字通常是从小到大排序。但有些情况,我们如果需要逆向排序,如数字从大到小排序,这时候就需要使用参数-r。示例如下所示:

    17-4 sort-r参数_c2i.jpg
  • 5、-u参数
      -u参数通常用于去掉排序结果中的重复项。如在文件添加几行重复项,再使用-u参数进行排序,详细示例如下所示:

    17-5 sort-u参数_c2i.jpg
  • 6、-o参数
      默认情况下,sort对排序后的内容是直接输出到标准输出中。对于仅仅查看而言没有太大影响。但如果想要保存排序后的结果怎么办?这时候就该参数-o上场了。详细示例如下所示:

    17-6 sort-o参数_c2i.jpg

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

  • 7、-c参数
      参数-c使用比较简单,主要用来检查文件是否已经排过序。

    17-7 sort-c参数_c2i.jpg
  • 8、-m参数
      参数-m主要用来将已经过排序的文件进行合并。注意,在文件合并前,如果没有排序,虽然也可合并,但意义不大。

    17-8 sort-m参数_c2i.jpg

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

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示例

  • 1、-c参数
    17-10 uniq-c参数_c2i.jpg

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

  • 2、-d参数
    17-11 uniq-d参数_c2i.jpg

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

  • 3、-u参数
    17-12 uniq-u参数_c2i.jpg

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

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

MyQRCode.jpg

相关文章

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

    sort   在计算机中通常会存储很多各种各样的文件,里面甚至会有大量的数据记录,如果这些数据能以某种顺序进行排列...

  • Linux命令学习之:uniq命令

    Linux命令学习之:uniq命令 uniq命令可以去除排序过的文件中的重复行,因此uniq经常和sort合用。也...

  • awk命令

    下文来自:美团 吴孟达更多AWK命令请参考:Linux awk 命令扩展:linux sort,uniq,cut,...

  • linux命令之uniq命令

    linux 命令 之 uniq命令是用于忽略或报告文件中的重复行,一般与sort命令结合使用 uniq命令可以加参...

  • PHP高手进阶指南

    Linux常用命令 grep、awk、sed、sort、uniq、ps、df Linux系统性能分析 vmstat...

  • Linux uniq 命令

    Linux uniq 命令 uniq 命令 uniq 命令可以去除排序过的文件中的重复行,因此 uniq 经常和 ...

  • 02_shell高级文本处理

    知识点 sort uniq cut wc sed命令 awk命令 crontab定时器 sort sort 命令对...

  • 百度 PHP 面试

    Linux文本操作1.统计命令——wc2.切分命令——cut3.排序命令——sort4.去重命令——uniq5.查...

  • 日志分析

    命令grep、awk、sort、uniq常用示例

  • Linux一些很好的学习博客(不断更新中)

    1..bashrc文件 2.uniq命令 3.sort命令 4.grep命令 5.Linux正则表达式 6.sed...

网友评论

    本文标题:Linux 基础教程 17-基本命令sort和uniq

    本文链接:https://www.haomeiwen.com/subject/mdqezttx.html