IDC知识库
IDC领域专业知识百科平台
首页 > 网络知识

网络知识linux下sort命令的使用方法讲解

    • 企业邮箱 全新登场
    • 虚拟主机
    • 云服务器

    Linux下的sort命令默认将文件中的每一行为单位,进行排序,然后输出。具体地,就是从每行的第一个字符开始,依次按ASCII码值进行比较,最后将结果按升序排序输出。

    语法:

    sort [option] [file(s) ]

    用途:将输入行按照键值字段与数据类型选项以及locale 排序

    主要选项:

    -b 忽略开头的空白
    -c 检查输入是否已正确排序,如输入未经排序,但退出码(exit code)为非零值,则不会有任何输出
    -d 字典顺序:仅文字数字与空白才有意义
    -g 一般数值:以浮点数字类型比较字段。这个选项的运作有点类似 -n.差别仅在于这个选项的数字可能有小数点及指数。(仅GNU版本提供此功能)
    -f 以不管字母大小写的方式排序
    -i 忽略无法打印的字符
    -k 定义排序键值字段(该选项后接一个字段编号,或则是一对数字。有时-k之后可用空白分隔。每个编号后都可以接一个点号的字符位置,及/ 或 修饰符(modifier)字母之一
    .且当出现多个-k选项时候,会先从第一个键值开始排序,找出匹配该键值的记录后,再进行第二个键值字段的排序,以此类推。)
    -m 将以排除的输入文件,合并为一个排序后的输出数据流。
    -n 以整数类型比较字段
    -o outfile 将输入写到指定文件,而非标准输出。如果该文件为输入文件之一,则sort 在进行配需与写到输入文件之前,会先将它复制到一个临时文件
    -r 倒置排序的顺序为 由大至小(descending),而非默认的由小至大(ascending)
    -t char 使用单个字符char作为默认的字段分割字符,取代默认的空白字符。
    -u 只有唯一的记录,丢弃所有具有相同键值的记录,只留其中的第一条。只有键值字段是重要的,也就是说:被丢弃的记录其他部分可能是不同值。

    行为模式:

    sort 会读取制定的文件,如果未给定文件,则读取标准输入,在将排序好的数据写至标准输出。

    实例一:

    (1)-k2.4,5.6 指的是从第二个字段的第4个字符开始比较,一直比到第五个字段的第六个字符。
    (2) sort -t: -k1,1 /etc/passwd 以冒号隔开的第一个字段:用户名称 对 /etc/passwd进行排序
    (3)sort -t: -k3nr /etc/passwd 以冒号隔开的第3个字段 uid 反向(由大到小)排序
    (4)sort -t: -k4n -k3n /etc/passwd 以冒号隔开的第4个字段GID,以及第3个字段uid排序
    (5)sort -t: -k4n -u /etc/passwd 以冒号隔开的第4个字段GID排序,且只输入唯一的GID

    实例二: 文本快排序

    有时,我们需要对多行记录的组合而成的数据排序。如 地址清单。为了方便记录,地址记录经常会切断,以一个或数个空行将彼此隔开。像这种数据没有一定的排序键值位置可供-k 选项使用,所以我们得自救,提供一些额外标记(markup)给这些数据。

    cat my-friends
    #SORTKEY:Schlo,Hans Jurgen
    Hans Jurgen Schlo
    Unter den Linden 78
    D-10117 Berlin
    Germany
    
    
    #SORTKEY:Jones,Adrian
    Adrian Jones
    371 Montgomery Park Road
    Henley-on-Thames RG9 4AJ
    UK
    
    
    #SORTKEY:Brown ,Kim
    Kim Brown
    1841 S Main Street
    1841 S Main Street
    Westchester ,NY 10502
    USA
    
    
    cat my-friends |
    awk -v RS="" '{ gsub("\n" ,"^z"); print }' |
    sort -f |
    awk -v ORS="\n\n" '{ gsub("^z","\n"); print }'|
    grep -v '# SORTKEY'

    函数gsub() 功能为全局性替换,类似 sed 下的 s/x/y/g 架构。 RS 变量是输入数据的记录分割器。 RS=“” 是一个特殊用法,指的是记录以空行的方式隔开。例如每个块或文本段落自成一个记录。最后,ORS指的是输出记录分割器,以print显示的每条输出记录会以其值作为终止。

    实例三:删除重复

    有时,将数据流连续重复的记录删除是有必要的。虽然sort -u 可以显示唯一值,但他的消除操作是一句匹配的键值,而非匹配的记录。uniq命令提供另一种过滤数据的方式:常用于管道,用来删除已用sort排序完成的重复记录。

    sort ...|uniq|...

    声明:本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-62778877-8306;邮箱:fanjiao@west.cn。本站原创内容未经允许不得转载,或转载时需注明出处:西部数码知识库 » linux下sort命令的使用方法讲解
    • 日销500+
      基础型云服务器

      2核CPU

      2G内存

      50G硬盘

      2M带宽

      独立IP

      分布式存储

      适合企业官网、个人站长类网站

      ¥106 原价¥116

    • 日销500+
      超值型云服务器

      2核CPU

      4G内存

      50G硬盘

      2M带宽

      独立IP

      分布式存储

      适合企业官网、行业门户类网站

      ¥156 原价¥171

    • 日销500+
      通用型云服务器

      4核CPU

      4G内存

      50G硬盘

      2M带宽

      独立IP

      分布式存储

      适合电商、论坛类网站

      ¥203 原价¥223

    分享到:更多 ()
      • 企业邮箱 全新登场
      • 虚拟主机
      • 云服务器

      评论 抢沙发

      • 昵称 (必填)
      • 邮箱 (必填)
      • 网址

      中国领先的互联网域名及云服务提供商

      为您提供专业域名知识,域名交易知识,云服务器知识,虚拟主机知识讲解

      域名注册云服务器