• linux sort uniq命令详解


    sort

    功能说明:将文本文件内容加以排序,sort可针对文本文件的内容,以行为单位来排序。

    sort [-bcdfimMnr][-o<输出文件>][-t<分隔字符>][+<起始栏位>-<结束栏位>][--help][--verison][文件]

      -b   忽略每行前面开始处的空格字符 。

      -c   检查文件是否已经按照顺序排序

      -d   排序时,处理英文字母、数字及空格字符外,忽略其他的字符。

      -f   排序时,将小写字母视为大写字母。

      -i   排序时,除了040至176之间的ASCII字符外,忽略其他的字符。

      -m   将几个排序好的文件进行合并。

      -M   将前面3个字母依照月份的缩写进行排序。

      -n   依照数值的大小排序。

      -o<输出文件>   将排序后的结果存入指定的文件。

      -r   以相反的顺序来排序。

      -t<分隔字符>   指定排序时所用的栏位分隔字符。

      -k  选择以哪个区间进行排序

      +<起始栏位>-<结束栏位>   以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。

      -u 在输出行中去除重复行。

    sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。

    举例:

    源文件:

    • apple
      pear
      orange
      pear
      1
      2
      10

    默认排序:

    • 1
      10
      2
      apple
      orange
      pear
      pear

    -u 在输出行中去除重复行。

    • 1
      10
      2
      apple
      orange
      pear

    -o 把排序结果输出到原文件中

    使用重定向:sort test.txt>test.txt 后,

    test.txt为空

    sort test.txt -o test.txt

     

    -c 检查文件是否已经按照顺序排序

    sort -c 排好序的文件,无返回信息,

    echo $?为0

    sort -c 未排序文件,有提示信息,

    echo $?为1

    -n 依照数值的大小排序,

    sort 默认情况下会将数字按照字符串来排序,

    所以会出现2比10大的情况。

    使用-n能避免该情况:sort -n test.txt

    • apple
      orange
      pear
      pear
      1
      2
      10

    -t<分隔字符> 指定排序时所用的栏位分隔字符,

    -k  选择以哪个区间进行排序

    cat date.txt 
    2017-12-02
    2017-01-09

    sort -n -k 2 -t'-' date.txt 

    • 2017-01-09
    • 2017-12-02

    其他举例:

    sort -t ' ' -k 3nr -k 2n facebook.txt

    先以第3个域进行逆序排序,如果相同,再以第2个域进行排序,n   依照数值的大小排序。

    后续学习可参考:http://blog.chinaunix.net/uid-10540984-id-313479.html

    uniq

    [-cdu][-f<栏位>][-s<字符位置>][-w<字符位置>][--help][--version][输入文件][输出文件]

    -u或--unique 只保留出现唯一一次的行列。

    -d或--repeated 仅显示重复出现的行列,出现一次的行列不会显示

    -c 在每列旁边显示该行重复出现的次数。

    -f n 或--skip-fields=n 忽略前N个字段。字段由空白字符(空格符、Tab)分隔

    -s<字符位置>或--skip-chars=<字符位置> 忽略比较指定的字符。-s n:忽略前n个字符,从n+1个字符开始比较

    -w<字符位置>或--check-chars=<字符位置> 指定要比较的字符。-w n:只比较前n个字符,对每行第n个字符以后的内容不作对照

     -i, --ignore-case     在比较的时候不区分大小写

    [输入文件] 指定已排序好的文本文件。如果不指定此项,则从标准读取数据;

    [输出文件] 指定输出的文件。如果不指定此选项,则将内容显示到标准输出设备(显示终端)。

    uniq 是对排序好的内容去重当重复的行并不相邻时,uniq 命令是不起作用的,所以需要先使用sort排序,在使用uniq去重

    举栗:

    原文件

    • e bsd 1000 600 4M
      c win7 2000 100 7G
      d winxp 4000 300 3G
      d winxp 500 300 3G
      g winxp 500 300 3G
      g winxp 500 300 3G
      G WINXP 500 300 3G

    uniq -c test_uniq.txt

    • 1 e bsd 1000 600 4M
      1 c win7 2000 100 7G
      1 d winxp 4000 300 3G
      1 d winxp 500 300 3G
      2 g winxp 500 300 3G
      1 G WINXP 500 300 3G

    -u 仅显示出现一次的行 ,不显示出现多次的行

    uniq -u -c test_uniq.txt 

    • 1 e bsd 1000 600 4M
      1 c win7 2000 100 7G
      1 d winxp 4000 300 3G
      1 d winxp 500 300 3G
      1 G WINXP 500 300 3G

    仅显示重复出现的行 -d

    uniq -d -c test_uniq.txt 

    • 2 g   winxp   500     300 3G

    不显示只出现一次的行

    -i 比较的时候不区分大小写 ,不区分大小写,所以有三行进行的合并

    uniq -i -c test_uniq.txt 

    • 1 e bsd 1000 600 4M
      1 c win7 2000 100 7G
      1 d winxp 4000 300 3G
      1 d winxp 500 300 3G
      3 g winxp 500 300 3G

    比较时忽略前n个字段,从n+1列开始比较 -f n

    uniq -c -f 3 test_uniq.txt

    • 1 e bsd 1000 600 4M
      1 c win7 2000 100 7G
      1 d winxp 4000 300 3G
      4 d winxp 500 300 3G

    源文件

    注意空格符
    • a b 30 3G
    • a h 30  3G
    • a g  30 3G
    • a  ffff  30 3G
    • uniq -c -f 2 test.txt
    1. 1 a b 30 3G
    2. 1 a h 30  3G
    3. 2 a g  30 3G

    忽略前2个字段时,前2个字段中的字符以及空格不同都不会有影响,

    但是第2个字段之后的空格与字符变化会影响去重效果

    比较时忽略前n个字符,从n+1个字符开始比较 -s n

    uniq -c -s 1 test_uniq.txt

    • 1 e bsd 1000 600 4M
      1 c win7 2000 100 7G
      1 d winxp 4000 300 3G
      3 d winxp 500 300 3G
      1 G WINXP 500 300 3G

    忽略前1个字符,第4,5,6,行会被认为是一样的

    只比较前n个字符,对每行第n个字符以后的内容不作对照 -w n

    uniq -c -w 1 test_uniq.txt

    • 1 e bsd 1000 600 4M
      1 c win7 2000 100 7G
      2 d winxp 4000 300 3G
      2 g winxp 500 300 3G
      1 G WINXP 500 300 3G

    指定输出文件

    uniq -c test_uniq.txt  out.txt

  • 相关阅读:
    log&& buffevent&&内存池 1
    ngx内存池设计概阅
    读 perf 笔记 简写
    smaps 使用&& 内存泄露
    cache占用高 文件delete cache
    工具小用法 dropwatch ss perf
    golang 读书笔记 数据类型
    重看ebpf 通信&&数据结构分析
    TCP 发送缓冲区问题--根本原因是gso引起 转载
    重看ebpf -代码载入执行点-hook
  • 原文地址:https://www.cnblogs.com/mianbaoshu/p/12069823.html
Copyright © 2020-2023  润新知