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  选择以哪个区间进行排序

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

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

源文件 默认排序 举栗 举栗
  • banana
  • apple
  • pear
  • orange
  • apple
  • pear
  • 1
  • 2
  • 10

  • 1
  • 10
  • 2
  • apple
  • apple
  • banana
  • orange
  • pear
  • pear

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

  • 1
  • 10
  • 2
  • apple
  • banana
  • orange
  • pear

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

cat space.txt cat space1.txt  
  • aaa
  • nn
  • tt
  • 3
  • 11
  • aaa
  • nn
  • tt
  • 3
  • 11
 
sort space.txt sort space1.txt sort -b space.txt
  • aaa
  • nn
  • 3
  • tt
  • 11
  • 11
  • 3
  • aaa
  • nn
  • tt
  • 11
  • 3
  • aaa
  • nn
  • tt
 
-o 把排序结果输出到原文件中

使用重定向:

sort test.txt>test.txt 后

test.txt为空

sort test.txt -o test.txt

cat test.txt

  • 1
  • 10
  • 2
  • apple
  • apple
  • banana
  • orange
  • pear
  • pear

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

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

cat date.txt 
2017-12-02
2017-01-09
2017-10-23
2017-04-24

sort -n -k 2 -t‘-‘ date.txt 
  • 2017-01-09
  • 2017-04-24
  • 2017-10-23
  • 2017-12-02

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

sort -n test.txt

  • apple
  • apple
  • banana
  • orange
  • pear
  • pear
  • 1
  • 2
  • 10

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

所以会出现2比10大的情况。使用-n能避免该情况

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

sort -c 排好序的文件,无返回信息,echo $?为0

sort -c 未排序文件,有提示信息,echo $?为1


-r  以相反的顺序来排序

cat test.txt

  • 1
  • 11
  • 2
  • 34

sort -n -r test.txt

  • 34
  • 11
  • 2
  • 1
 

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去重

举栗:

原文件
默认去重

仅显示出现一次的行 -u
  1. e   bsd     1000    600 4M
  2. c   Debian  600     200 8K
  3. b   linux   1000    200 5K
  4. a   mac     2000    500 2K
  5. f   SUSE    4000    300 6M
  6. c   win7    2000    100 7G
  7. d   winxp   4000    300 3G
  8. d   winxp   500     300 3G
  9. g   winxp   500     300 3G
  10. g   winxp   500     300 3G
  11. G   WINXP   500     300 3G

uniq -c test_uniq.txt

  1. 1 e   bsd     1000    600 4M
  2. 1 c   Debian  600     200 8K
  3. 1 b   linux   1000    200 5K
  4. 1 a   mac     2000    500 2K
  5. 1 f   SUSE    4000    300 6M
  6. 1 c   win7    2000    100 7G
  7. 1 d   winxp   4000    300 3G
  8. 1 d   winxp   500     300 3G
  9. 2 g   winxp   500     300 3G
  10. 1 G   WINXP   500     300 3G

uniq -u -c test_uniq.txt

  1. 1 e   bsd     1000    600 4M
  2. 1 c   Debian  600     200 8K
  3. 1 b   linux   1000    200 5K
  4. 1 a   mac     2000    500 2K
  5. 1 f   SUSE    4000    300 6M
  6. 1 c   win7    2000    100 7G
  7. 1 d   winxp   4000    300 3G
  8. 1 d   winxp   500     300 3G
  9. 1 G   WINXP   500     300 3G

不显示出现多次的行

仅显示重复出现的行 -d 比较的时候不区分大小写 -i

uniq -d -c test_uniq.txt

  1. 2 g   winxp   500     300 3G

不显示只出现一次的行


uniq -i -c test_uniq.txt

  1. 1 e   bsd     1000    600 4M
  2. 1 c   Debian  600     200 8K
  3. 1 b   linux   1000    200 5K
  4. 1 a   mac     2000    500 2K
  5. 1 f   SUSE    4000    300 6M
  6. 1 c   win7    2000    100 7G
  7. 1 d   winxp   4000    300 3G
  8. 1 d   winxp   500     300 3G
  9. 3 g   winxp   500     300 3G

不区分大小写,所以有三行进行的合并

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

uniq -c -f 3 test_uniq.txt

  1. 1 e   bsd     1000    600 4M
  2. 1 c   Debian  600     200 8K
  3. 1 b   linux   1000    200 5K
  4. 1 a   mac     2000    500 2K
  5. 1 f   SUSE    4000    300 6M
  6. 1 c   win7    2000    100 7G
  7. 1 d   winxp   4000    300 3G
  8. 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个字段之后的空格与字符变化会影响去重效果


uniq -c -s 1 test_uniq.txt

  1. 1 e   bsd     1000    600 4M
  2. 1 c   Debian  600     200 8K
  3. 1 b   linux   1000    200 5K
  4. 1 a   mac     2000    500 2K
  5. 1 f   SUSE    4000    300 6M
  6. 1 c   win7    2000    100 7G
  7. 1 d   winxp   4000    300 3G
  8. 3 d   winxp   500     300 3G
  9. 1 G   WINXP   500     300 3G

忽略前1个字符,

d   winxp   500     300 3G跟g   winxp   500     300 3G会被认为是一样的

只比较前n个字符,对每行第n个字符以后的内容不作对照 -w n 指定输出文件

uniq -c -w 1 test_uniq.txt

  1. 1 e   bsd     1000    600 4M
  2. 1 c   Debian  600     200 8K
  3. 1 b   linux   1000    200 5K
  4. 1 a   mac     2000    500 2K
  5. 1 f   SUSE    4000    300 6M
  6. 1 c   win7    2000    100 7G
  7. 2 d   winxp   4000    300 3G
  8. 2 g   winxp   500     300 3G
  9. 1 G   WINXP   500     300 3G

uniq -c test_uniq.txt  out.txt

cat out.txt

  1. 1 e   bsd     1000    600 4M
  2. 1 c   Debian  600     200 8K
  3. 1 b   linux   1000    200 5K
  4. 1 a   mac     2000    500 2K
  5. 1 f   SUSE    4000    300 6M
  6. 1 c   win7    2000    100 7G
  7. 1 d   winxp   4000    300 3G
  8. 1 d   winxp   500     300 3G
  9. 2 g   winxp   500     300 3G
  10. 1 G   WINXP   500     300 3G

默认去重,将去重结果保存到out.txt

原文地址:https://www.cnblogs.com/mianbaoshu/p/12069823.html

时间: 2024-11-10 08:46:10

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

(转)Linux下PS命令详解

(转)Linux下PS命令详解 整理自:http://blog.chinaunix.net/space.php?uid=20564848&do=blog&id=74654 要对系统中进程进行监测控制,查看状态,内存,CPU的使用情况,使用命令:/bin/ps (1) ps :是显示瞬间进程的状态,并不动态连续: (2) top:如果想对进程运行时间监控,应该用 top 命令: (3) kill 用于杀死进程或者给进程发送信号: (4) 查看文章最后的man手册,可以查看ps的每项输出的含义

Linux系统进程管理命令详解

Linux管理进程的最好方法就是使用命令行下的系统命令.Linux下面的进程涉及的命令有at, bg, fg, kill, crontab, jobs, ps, pstree, top, nice, renice, sleep, nohup. 1.at命令:定时运行命令 作用:at命令在指定时刻执行指定的命令序列. 格式: at [-V] [-q x] [-f file] [-m] time atq [-V] [-q x] atrm [-V] [-q x] job- batch [-V] [-f

linux主要shell命令详解

Linux主要shell命令详解 shell是用户和Linux操作系统之间的接口.Linux中有多种shell,其中缺省使用的是Bash.本章讲述了shell的工作原理,shell的种类,shell的一般操作及Bash的特性. 什么是shell Linux系统的shell作为操作系统的外壳,为用户提供使用操作系统的接口.它是命令语言.命令解释程序及程序设计语言的统称. shell是用户和Linux内核之间的接口程序,如果把Linux内核想象成一个球体的中心,shell就是围绕内核的外层.当从sh

Linux下chkconfig命令详解

Linux下chkconfig命令详解 chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息.谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接. 使用语法:chkconfig [--add][--del][--list][系统服务] 或 chkconfig [--level <等级代号>][系统服务][on/off/reset] chkconfig在没有参数运行时,显示用法.如果加上服务名,那么就检查这个服务是否在当前运行级启动.如果是,返

转载的 Linux下chkconfig命令详解

Linux下chkconfig命令详解 chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息.谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接. 使用语法: chkconfig [--add][--del][--list][系统服务] 或 chkconfig [--level <等级代号>][系统服务][on/off/reset] chkconfig 在没有参数运行时,显示用法.如果加上服务名,那么就检查这个服务是否在当前运行级启动.如果是

linux系统find命令详解

find命令 –用途:用于查找文件或目录 –格式:find  [查找范围]  [查找条件] 常用查找条件 –-name:按文件名称查找 –-size:按文件大小查找 –-user:按文件属主查找 –-type:按文件类型查找 –-print:以\n为换行符打印出文件(路径) 高级查找条件 –-perm:按权限查找 –-ctime(-cmin):按文件创建时间(天为单位)查找 –-atime(-amin):按访问时间查找 –-mtime(-mmin):修改时间查找 –-newer:查找比指定文件更

linux下scp命令详解

scp是 secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令.linux的scp命令可以在linux服务器之间复制文件和目录. scp命令的用处: scp在网络上不同的主机之间复制文件,它使用ssh安全协议传输数据,具有和ssh一样的验证机制,从而安全的远程拷贝文件. scp命令基本格式: scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file] [-l limit] [-o s

linux中ls命令详解

s 命令可以说是linux下最常用的命令之一. -a 列出目录下的所有文件,包括以 . 开头的隐含文件.-b 把文件名中不可输出的字符用反斜杠加字符编号(就象在C语言里一样)的形式列出.-c 输出文件的 i 节点的修改时间,并以此排序.-d 将目录象文件一样显示,而不是显示其下的文件.-e 输出时间的全部信息,而不是输出简略信息.-f -U 对输出的文件不排序.-g 无用.-i 输出文件的 i 节点的索引信息.-k 以 k 字节的形式表示文件的大小.-l 列出文件的详细信息.-m 横向输出文件名

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

Linux下ps命令详解 1. 运行(正在运行或在运行队列中等待) 2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号) 3. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)4. 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)5. 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)ps工具标识进程的5种状态码:D 不可中断 uninterruptible sleep (usuall