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

linux sort uniq命令详解的更多相关文章

  1. Linux:uniq命令详解

    uniq uniq命令用于报告或忽略文件中的重复行,一般与sort命令结合使用. 语法 uniq(选项)(参数) 选项 -c或——count:在每列旁边显示该行重复出现的次数: -d或--repeat ...

  2. linux shell 脚本攻略学习8---md5校验,sort排序,uniq命令详解

    一.校验与核实 目前最为出名的校验技术是md5sum和sha1sum,它们对文件内容使用相应的算法来生成校验和. 举例: amosli@amosli-pc:~/learn$ md5sum text.t ...

  3. LINUX系统VMSTAT命令详解

    linux系统vmstat命令详解 [转自 https://www.cnblogs.com/wensiyang0916/p/6514820.html] vmstat 1    1表示每秒采集一次vms ...

  4. Linux 系统性能监控命令详解

    Linux 系统性能监控命令详解 CPU MEMORY IO NETWORK LINUX进程内存占用查看方法 系统负载过重时往往会引起其它子系统的问题,比如:->大量的读入内存的IO请求(pag ...

  5. Linux下ps命令详解 Linux下ps命令的详细使用方法

    http://www.jb51.net/LINUXjishu/56578.html Linux下的ps命令比较常用 Linux下ps命令详解Linux上进程有5种状态:1. 运行(正在运行或在运行队列 ...

  6. linux之find命令详解

    linux之find命令详解 查找文件find ./ -type f查找目录find ./ -type d查找名字为test的文件或目录find ./ -name test查找名字符合正则表达式的文件 ...

  7. Linux下rar命令详解

    Linux下rar命令详解 用法: rar <命令> -<选项1> ….-<选项N> < 操作文档> <文件…> <@文件列表…> ...

  8. linux下tar命令详解

     linux下tar命令详解    tar是Linux环境下最常用的备份工具之一.tar(tap archive)原意为操作磁带文件,但基于Linux的文件操作机制,同样也可适用于普通的磁盘文件.ta ...

  9. Linux下chkconfig命令详解(转)

    Linux下chkconfig命令详解 chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息.谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接. ...

随机推荐

  1. mysql基础之数据库备份和恢复的基础知识

    备份数据的最终目的是为了在出现一些意外情况时,能够通过备份将数据还原,所以单单的备份数据往往是无法满足还原时的需求的,所以在备份数据库时,除了要备份数据本身,还要备份相关的数据库环境,如配置文件,定时 ...

  2. 关于typedef的用法总结-(转自Bigcoder)

    不管实在C还是C++代码中,typedef这个词都不少见,当然出现频率较高的还是在C代码中.typedef与#define有些相似,但更多的是不同,特别是在一些复杂的用法上,就完全不同了,看了网上一些 ...

  3. 05丨实验:安装MongoDB

    https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/ 源码安装 export PATH=$PATH:/data/mo ...

  4. lvresize 调整LVM逻辑卷的空间大小,可以增大空间和缩小空间

    lvresize 相关命令:lvreduce,lvextend,lvdisplay,lvcreate,lvremove,lvscan   lvresize指令:调整逻辑卷空间大小[语    法]lvr ...

  5. redis 和 mysql 的主从复制

    1. mysql主从复制 (1) 为什么要做主从复制? 1.在业务复杂的系统中,有这么一个情景,有一句sql语句需要锁表,导致暂时不能使用读的服务,那么就很影响运行中的业务,使用主从复制,让主库负责写 ...

  6. 如何设计 API 接口,实现统一格式返回?

    文章目录: 目录 前后端接口交互 接口返回值约定 返回值规范 正确返回 错误返回 统一定义错误码 错误码规范 Controller 层如何用? 正确返回 错误返回 详细代码实现 错误码 Control ...

  7. synchronized 的超多干货!

    前言 synchronized 这个关键字的重要性不言而喻,几乎可以说是并发.多线程必须会问到的关键字了.synchronized 会涉及到锁.升级降级操作.锁的撤销.对象头等.所以理解 synchr ...

  8. libevent中数据缓冲区buffer分析

    很多时候为了应对数据IO的"慢"或者其他原因都需要使用数据缓冲区.对于数据缓冲,我们不陌生,但是对于如何实现这个缓冲区,相信很多时候大家都没有考虑过.今天就通过分析libevent ...

  9. GO学习-(23) Go语言操作MySQL + 强大的sqlx

    Go语言操作MySQL MySQL是业界常用的关系型数据库,本文介绍了Go语言如何操作MySQL数据库. Go操作MySQL 连接 Go语言中的database/sql包提供了保证SQL或类SQL数据 ...

  10. 3D惯导Lidar仿真

    3D惯导Lidar仿真 LiDAR-Inertial 3D Plane Simulator 摘要 提出了最*点*面表示的形式化方法,并分析了其在三维室内同步定位与映射中的应用.提出了一个利用最*点*面 ...