zoukankan      html  css  js  c++  java
  • 用实例来说明linux命令sort的用法

    sort常用参数的介绍就省略了,直接man sort就OK了......

    这里主要通过实际问题来介绍(通常用于分析日志)

    先介绍2个选项:

    1.-k选项指定排序字段的使用:-k[FStart[.CStart]][Modifier][,[FEnd[.CEnd]][Modifier]] 

    排序关键字包括所有以FStart变量指定的字段和CStart变量指定的列开头的及以FEnd变量指定的字段和CEnd变量指定的列结束的字符,缺省值为:FStart行开头,CStart字段第一列,FEnd行结束,CEnd字段最后一列

    例如:-k3.2,4.4  指从第3个字段的第2个字符开始比较,一直比到第4个字段的第4个字符

    2.-t选项选择字段分隔符

    测试数据如下:

    # cat data 
    apple:234
    apple:623
    banana:234
    apple:72
    apple:123
    pear:9
    banana:92

    一.以":"作为分隔符,对第一列进行升序排序

    # sort -t ':' -k1,1 data
    apple:123
    apple:234
    apple:623
    apple:72
    banana:234
    banana:92
    pear:9

    注:默认是升序排序,貌似在对第一列排序的基础上也对第二列进行了排序,等价于# sort -t ':' -k1 data

    二.以":"作为分隔符,先对第一列进行升序排序,而对第二列进行降序排序(以整数类型进行比较)

    # sort -t ':' -k1,1 -k2,2nr data
    apple:623
    apple:234
    apple:123
    apple:72
    banana:234
    banana:92
    pear:9

    三.以":"作为分隔符,对第一列进行升序排序,并对第一列进行去重

    # sort -t ':' -k1,1 -u data
    apple:234
    banana:234
    pear:9

    注:通过与cat data的结果进行对比可知:默认是在第一列相同的所有行中仅保留未排序状态下的第一行

    四.以":"作为分隔符,对第一列进行升序排序,并对第一列进行去重,去重的规则是在第一列相同的所有行中保留第二列值最大的行

    # sort -t ':' -k1,1 -k 2,2nr data | sort -t ':' -k1,1 -u
    apple:623
    banana:234
    pear:9

    其实也可以使用awk:# sort -t ':' -k1,1 -k 2,2nr data | awk 'BEGIN{FS=":"} !a[$1]++',注意这里需要使用BEGIN,明白awk的处理过程后不难理解这里为何要加上BEGIN

    五.先排序,然后以":"作为分隔符对第一列去重后并统计,并按照统计的计数进行排序

    # sort -t ':' -k1,1 data | awk 'BEGIN{FS=":"} {print $1}' | uniq -c | sort -n
    1 pear
    2 banana
    4 apple

  • 相关阅读:
    JavaWeb--HttpSession案例
    codeforces B. Balls Game 解题报告
    hdu 1711 Number Sequence 解题报告
    codeforces B. Online Meeting 解题报告
    ZOJ 3706 Break Standard Weight 解题报告
    codeforces C. Magic Formulas 解题报告
    codeforces B. Sereja and Mirroring 解题报告
    zoj 1109 Language of FatMouse 解题报告
    hdu 1361.Parencodings 解题报告
    hdu 1004 Let the Balloon Rise 解题报告
  • 原文地址:https://www.cnblogs.com/stubborn412/p/2253071.html
Copyright © 2011-2022 走看看