十二.   行的排序命令sort:



  1.  sort命令行选项:

选项 描述
-t 字段之间的分隔符
-f 基于字符排序时忽略大小写
-k 定义排序的域字段,或者是基于域字段的部分数据进行排序
-m 将已排序的输入文件,合并为一个排序后的输出数据流
-n 以整数类型比较字段
-o outfile 将输出写到指定的文件
-r 倒置排序的顺序为由大到小,正常排序为由小到大
-u 只有唯一的记录,丢弃所有具有相同键值的记录
-b 忽略前面的空格

2.  sort使用实例:

    提示:在下面的输出结果中红色标注的为第一排序字段,后面的依次为紫、绿。

    /> sed -n '1,5p' /etc/passwd > users

    /> cat users

    root:x:0:0:root:/root:/bin/bash

    bin:x:1:1:bin:/bin:/sbin/nologin

    daemon:x:2:2:daemon:/sbin:/sbin/nologin

    adm:x:3:4:adm:/var/adm:/sbin/nologin

    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin



    #-t定义了冒号为域字段之间的分隔符,-k 2指定基于第二个字段正向排序(字段顺序从1开始)。

    /> sort -t':' -k 1 users

    adm:x:3:4:adm:/var/adm:/sbin/nologin

    bin:x:1:1:bin:/bin:/sbin/nologin

    daemon:x:2:2:daemon:/sbin:/sbin/nologin

    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

    root:x:0:0:root:/root:/bin/bash



    #还是以冒号为分隔符,这次是基于第三个域字段进行倒置排序。

    /> sort -t':' -k 3r users

    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

    adm:x:3:4:adm:/var/adm:/sbin/nologin

    daemon:x:2:2:daemon:/sbin:/sbin/nologin

    bin:x:1:1:bin:/bin:/sbin/nologin

    root:x:0:0:root:/root:/bin/bash



    #先以第六个域的第2个字符到第4个字符进行正向排序,在基于第一个域进行反向排序。

    /> sort -t':' -k 6.2,6.4 -k 1r users

    bin:x:1:1:bin:/bin:/sbin/nologin

    root:x:0:0:root:/root:/bin/bash

    daemon:x:2:2:daemon:/sbin:/sbin/nologin

    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

    adm:x:3:4:adm:/var/adm:/sbin/nologin



    #先以第六个域的第2个字符到第4个字符进行正向排序,在基于第一个域进行正向排序。和上一个例子比,第4和第5行交换了位置。

    /> sort -t':' -k 6.2,6.4 -k 1 users

    bin:x:1:1:bin:/bin:/sbin/nologin

    root:x:0:0:root:/root:/bin/bash

    daemon:x:2:2:daemon:/sbin:/sbin/nologin

    adm:x:3:4:adm:/var/adm:/sbin/nologin

    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin



    #基于第一个域的第2个字符排序

    /> sort -t':' -k 1.2,1.2 users    

    daemon:x:2:2:daemon:/sbin:/sbin/nologin

    adm:x:3:4:adm:/var/adm:/sbin/nologin

    bin:x:1:1:bin:/bin:/sbin/nologin

    root:x:0:0:root:/root:/bin/bash

    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin



    #基于第六个域的第2个字符到第4个字符进行正向排序,-u命令要求在排序时删除键值重复的行。

    /> sort -t':' -k 6.2,6.4 -u users

    bin:x:1:1:bin:/bin:/sbin/nologin

    root:x:0:0:root:/root:/bin/bash

    daemon:x:2:2:daemon:/sbin:/sbin/nologin

    adm:x:3:4:adm:/var/adm:/sbin/nologin



    /> cat /etc/passwd | wc -l  #计算该文件中文本的行数。

    39

    /> sed -n '35,$p' /etc/passwd > users2  #取最后5行并输出到users2中。

    /> cat users2

    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

    mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash

    pulse:x:496:494:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin

    gdm:x:42:42::/var/lib/gdm:/sbin/nologin

    stephen:x:500:500:stephen:/home/stephen:/bin/bash



    #基于第3个域字段以文本的形式排序

    /> sort -t':' -k 3 users2

    mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash

    gdm:x:42:42::/var/lib/gdm:/sbin/nologin

    pulse:x:496:494:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin

    stephen:x:500:500:stephen:/home/stephen:/bin/bash

    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin



    #基于第3个域字段以数字的形式排序

    /> sort -t':' -k 3n users2

    mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash

    gdm:x:42:42::/var/lib/gdm:/sbin/nologin

    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

    pulse:x:496:494:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin

    stephen:x:500:500:stephen:/home/stephen:/bin/bash



    #基于当前系统执行进程的owner名排序,并将排序的结果写入到result文件中

    /> ps -ef | sort -k 1 -o result



十三. 删除重复行的命令uniq:



    uniq有3个最为常用的选项,见如下列表:

选项 命令描述
-c 可在每个输出行之前加上该行重复的次数
-d 仅显示重复的行
-u 显示为重复的行

/> cat testfile

    hello

    world

    friend

    hello

    world

    hello



    #直接删除未经排序的文件,将会发现没有任何行被删除

    /> uniq testfile  

    hello

    world

    friend

    hello

    world

    hello



    #排序之后删除了重复行,同时在行首位置输出该行重复的次数

    /> sort testfile | uniq -c  

    1 friend

    3 hello

    2 world



    #仅显示存在重复的行,并在行首显示该行重复的次数

    /> sort testfile | uniq -dc

    3 hello

    2 world



    #仅显示没有重复的行

    /> sort testfile | uniq -u

    friend

十四. 文件压缩解压命令tar:



   1.  tar命令行选项

选项 命令描述
-c 建立压缩档案
-x 解压
--delete 从压缩包中删除已有文件,如果该文件在包中出现多次,该操作其将全部删除。
-t 查看压缩包中的文件列表
-r 向压缩归档文件末尾追加文件
-u 更新原压缩包中的文件
-z 压缩为gzip格式,或以gzip格式解压
-j 压缩为bzip2格式,或以bzip2格式解压
-v 显示压缩或解压的过程,该选项一般不适于后台操作
-f 使用档案名字,这个参数是最后一个参数,后面只能接档案名。

2.  tar使用实例:

    #将当前目录下所有文件压缩打包,需要说明的是很多人都习惯将tar工具压缩的文件的扩展名命名为.tar

    /> tar -cvf test.tar *

    -rw-r--r--. 1 root root   183 Nov 11 08:02 users

    -rw-r--r--. 1 root root   279 Nov 11 08:45 users2



    /> cp ../*.log .                  #从上一层目录新copy一个.log文件到当前目录。

    /> tar -rvf test.tar *.log     #将扩展名为.log的文件追加到test.tar包里。

    /> tar -tvf test.tar

    -rw-r--r-- root/root        183 2011-11-11 08:02 users

    -rw-r--r-- root/root        279 2011-11-11 08:45 users2

    -rw-r--r-- root/root     48217 2011-11-11 22:16 install.log



    /> touch install.log           #使原有的文件更新一下最新修改时间

    /> tar -uvf test.tar *.log    #重新将更新后的log文件更新到test.tar中

    /> tar -tvf test.tar             #从输出结果可以看出tar包中多出一个更新后install.log文件。

    -rw-r--r-- root/root         183 2011-11-11 08:02 users

    -rw-r--r-- root/root         279 2011-11-11 08:45 users2

    -rw-r--r-- root/root     48217 2011-11-11 22:16 install.log

    -rw-r--r-- root/root     48217 2011-11-11 22:20 install.log



    /> tar --delete install.log -f test.tar #基于上面的结果,从压缩包中删除install.log

    -rw-r--r-- root/root       183 2011-11-11 08:02 users

    -rw-r--r-- root/root       279 2011-11-11 08:45 users2



    /> rm -f users users2      #从当前目录将tar中的两个文件删除

    /> tar -xvf test.tar          #解压

    /> ls -l users*                 #仅列出users和users2的详细列表信息

    -rw-r--r--. 1 root root 183 Nov 11 08:02 users

    -rw-r--r--. 1 root root 279 Nov 11 08:45 users2



    #以gzip的格式压缩并打包,解压时也应该以同样的格式解压,需要说明的是以该格式压缩的包习惯在扩展名后加.gz

    /> tar -cvzf test.tar.gz *

    /> tar -tzvf test.tar.gz      #查看压缩包中文件列表时也要加z选项(gzip格式)

    -rw-r--r-- root/root     48217 2011-11-11 22:50 install.log

    -rw-r--r-- root/root         183 2011-11-11 08:02 users

    -rw-r--r-- root/root         279 2011-11-11 08:45 users2



    /> rm -f users users2 install.log

    /> tar -xzvf test.tar.gz     #以gzip的格式解压

    /> ls -l *.log users*

    -rw-r--r-- root/root     48217 2011-11-11 22:50 install.log

    -rw-r--r-- root/root         183 2011-11-11 08:02 users

    -rw-r--r-- root/root         279 2011-11-11 08:45 users2



    /> rm -f test.*                #删除当前目录下原有的压缩包文件

    #以bzip2的格式压缩并打包,解压时也应该以同样的格式解压,需要说明的是以该格式压缩的包习惯在扩展名后加.bz2

    /> tar -cvjf test.tar.bz2 *

    /> tar -tjvf test.tar.bz2    #查看压缩包中文件列表时也要加j选项(bzip2格式)

    -rw-r--r-- root/root     48217 2011-11-11 22:50 install.log

    -rw-r--r-- root/root         183 2011-11-11 08:02 users

    -rw-r--r-- root/root         279 2011-11-11 08:45 users2



    /> rm -f *.log user*

    /> tar -xjvf test.tar.bz2    #以bzip2的格式解压

    /> ls -l

    -rw-r--r--. 1 root root 48217 Nov 11 22:50 install.log

    -rw-r--r--. 1 root root 10530 Nov 11 23:08 test.tar.bz2

    -rw-r--r--. 1 root root     183 Nov 11 08:02 users

    -rw-r--r--. 1 root root     279 Nov 11 08:45 users2



十五. 大文件拆分命令split:



    下面的列表中给出了该命令最为常用的几个命令行选项:

选项 描述
-l 指定行数,每多少分隔成一个文件,缺省值为1000行。
-b 指定字节数,支持的单位为:k和m
-C 与-b参数类似,但切割时尽量维持每行的完整性
-d 生成文件的后缀为数字,如果不指定该选项,缺省为字母

/> ls -l

    -rw-r--r--. 1 root root 10530 Nov 11 23:08 test.tar.bz2



    /> split -b 5k test.tar.bz2     #以每文件5k的大小切割test.tar.bz2

    /> ls -l                                #查看切割后的结果,缺省情况下拆分后的文件名为以下形式。

    -rw-r--r--. 1 root root 10530 Nov 11 23:08 test.tar.bz2

    -rw-r--r--. 1 root root   5120 Nov 11 23:34 xaa

    -rw-r--r--. 1 root root   5120 Nov 11 23:34 xab

    -rw-r--r--. 1 root root     290 Nov 11 23:34 xac



    /> rm -f x*                         #删除拆分后的小文件

    /> split -d -b 5k test.tar.bz2 #-d选项以后缀为数字的形式命名拆分后的小文件

    /> ls -l

    -rw-r--r--. 1 root root 10530 Nov 11 23:08 test.tar.bz2

    -rw-r--r--. 1 root root   5120 Nov 11 23:36 x00

    -rw-r--r--. 1 root root   5120 Nov 11 23:36 x01

    -rw-r--r--. 1 root root     290 Nov 11 23:36 x02



    /> wc install.log -l             #计算该文件的行数

    /> split -l 300 install.log     #每300行拆分成一个小文件

    /> ls -l x*

    -rw-r--r--. 1 root root 11184 Nov 11 23:42 xaa

    -rw-r--r--. 1 root root 10805 Nov 11 23:42 xab

    -rw-r--r--. 1 root root 12340 Nov 11 23:42 xac

    -rw-r--r--. 1 root root 11783 Nov 11 23:42 xad

    -rw-r--r--. 1 root root   2105 Nov 11 23:42 xae

linux 5-sort,uniq,tar,split的更多相关文章

  1. Linux中sort和uniq关于排序去重的那些用法

    相信在Linux下对文件操作经常会用到sort和uniq命令,下面系统的介绍一下这两个命令的用法. sort命令是在Linux里非常有用,它将文件进行排序,并将排序结果标准输出.sort命令既可以从特 ...

  2. linux之sort和uniq

    uniq uniq命令: uniq不加参数,只对相邻的相同行内容去重. 例子如下: [root@localhost ~]# pwd /root [root@localhost ~]# cat oldb ...

  3. linux中sort、uniq、cut、tr、wc命令的使用

    文本处理命令 1.sort命令 使用场景 : 用于将文件内容加以排序(可以和cat一起用) 参数 作用 -n 依照数值的大小排序 -r 以相反的顺序来排序(默认只比较第一个数,-rn是按所有数值比较) ...

  4. 11、Linux基础--sort、uniq、cut、tr、wc、流处理工具sed

    笔记 1.晨考 1.写出过滤手机号的正则表达式 1[0-9]{10} 2.写出过滤邮箱的正则表达式 chenyang@123.com [a-zA-Z0-9-_]+@[a-z0-9]+\.(com|cn ...

  5. linux 命令 — sort、uniq

    sort uniq sort:对行或者文本文件排序 uniq:去除重复的行 常用 sort -n file.txt 按数字进行排序 sort -r file.txt 按逆序进行排序 sort -M f ...

  6. Linux命令sort和uniq 的基本使用

    uniq 123.txt  去除连续重复uniq -u 123.txt  保留唯一uniq -c 123.txt  去重并计算出现的个数sort -n 123.txt | uniq -c 排序后去重s ...

  7. sort +awk+uniq 统计文件中出现次数最多的前10个单词

    实例cat logt.log|sort -s -t '-' -k1n |awk '{print $1;}'|uniq -c|sort -k1nr|head -100 统计文件中出现次数最多的前10个单 ...

  8. linux sort,uniq,cut,wc,tr命令详解

    sort是在Linux里非常常用的一个命令,对指定文件进行排序.去除重复的行 sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出.如果 File 参数指定多个文件,那么 sor ...

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

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

随机推荐

  1. Shell 同时读取多个文件

    现有两个文件 1.txt  2.txt,内容分别如下: [root@SHO-XXW-- readmulti]# .txt [root@SHO-XXW-- readmulti]# .txt a b c ...

  2. 开发ionic准备之安卓模拟器设置(2)

    发现这个安卓模拟器设置屏幕还不能太大,太大显示不全,然后整个模拟器不能拖动,所以尽量不要设置太大的分辨率 ,如下即可 如果选安卓4.4然后勾选了其他下面的ok还不能点击的话,这下要去sdk manag ...

  3. C++Singleton的DCLP(双重锁)实现以及性能测评

      本文系原创,转载请注明:http://www.cnblogs.com/inevermore/p/4014577.html   根据维基百科,对单例模式的描述是: 确保一个类只有一个实例,并提供对该 ...

  4. python pip install error

    使用pip install的时候报错 解决方法是使用如下的命令进行安装 python -m pip install sqlalchemy 升级pip的命令python2 -m pip install ...

  5. C中的C文件与h文件辨析

    简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程:       1.预处理阶段 2.词法与语法分析阶段 .编译阶段,首先编译成纯 ...

  6. 企业级分布式存储应用与实战MogileFS、FastDFS

    项目实战9—企业级分布式存储应用与实战MogileFS.FastDFS   目录 实战一:企业级分布式存储应用与实战 mogilefs 实现 原理 1.环境准备 2.下载安装,每个机器都一样 3.数据 ...

  7. Ansible 安装jdk

    1. 在hosts文件添一个group,里面是你需要安装jdk的ip,如: [newhosts]192.168.2.155 ansible_ssh_user=hadoop ansible_ssh_pa ...

  8. linux下 apache启动、停止、重启命令

    假设你的apahce安装目录为/usr/local/apache2,这些方法适合任何情况 apahce启动命令:推荐/usr/local/apache2/bin/apachectl start apa ...

  9. IPython introduction

    转载:http://blog.csdn.net/gavin_john/article/details/53086766 1. IPython介绍 ipython是一个python的交互式shell,比 ...

  10. 一致性哈希算法PHP测试片段

    <?php header('Content-type: text/html; charset=utf8');# 抽象接口interface hash{ public function _hash ...