找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 5086|回复: 0

Linux Shell常用技巧(六)

[复制链接]
发表于 2012-4-21 10:18:41 | 显示全部楼层 |阅读模式
  1. 十二.   行的排序命令sort:
  2.   1.  sort命令行选项:
  3. 选项        描述
  4. -t        字段之间的分隔符
  5. -f        基于字符排序时忽略大小写
  6. -k        定义排序的域字段,或者是基于域字段的部分数据进行排序
  7. -m        将已排序的输入文件,合并为一个排序后的输出数据流
  8. -n        以整数类型比较字段
  9. -o outfile        将输出写到指定的文件
  10. -r        倒置排序的顺序为由大到小,正常排序为由小到大
  11. -u        只有唯一的记录,丢弃所有具有相同键值的记录
  12. -b        忽略前面的空格
  13.    2.  sort使用实例:
  14.     提示:在下面的输出结果中红色标注的为第一排序字段,后面的依次为紫、绿。
  15.     /> sed -n '1,5p' /etc/passwd > users
  16.     /> cat users
  17.     root:x:0:0:root:/root:/bin/bash
  18.     bin:x:1:1:bin:/bin:/sbin/nologin
  19.     daemon:x:2:2:daemon:/sbin:/sbin/nologin
  20.     adm:x:3:4:adm:/var/adm:/sbin/nologin
  21.     lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
  22.     #-t定义了冒号为域字段之间的分隔符,-k 2指定基于第二个字段正向排序(字段顺序从1开始)。
  23.     /> sort -t':' -k 1 users
  24.     adm:x:3:4:adm:/var/adm:/sbin/nologin
  25.     bin:x:1:1:bin:/bin:/sbin/nologin
  26.     daemon:x:2:2:daemon:/sbin:/sbin/nologin
  27.     lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
  28.     root:x:0:0:root:/root:/bin/bash
  29.     #还是以冒号为分隔符,这次是基于第三个域字段进行倒置排序。
  30.     /> sort -t':' -k 3r users
  31.     lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
  32.     adm:x:3:4:adm:/var/adm:/sbin/nologin
  33.     daemon:x:2:2:daemon:/sbin:/sbin/nologin
  34.     bin:x:1:1:bin:/bin:/sbin/nologin
  35.     root:x:0:0:root:/root:/bin/bash
  36.     #先以第六个域的第2个字符到第4个字符进行正向排序,在基于第一个域进行反向排序。
  37.     /> sort -t':' -k 6.2,6.4 -k 1r users
  38.     bin:x:1:1:bin:/bin:/sbin/nologin
  39.     root:x:0:0:root:/root:/bin/bash
  40.     daemon:x:2:2:daemon:/sbin:/sbin/nologin
  41.     lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
  42.     adm:x:3:4:adm:/var/adm:/sbin/nologin
  43.     #先以第六个域的第2个字符到第4个字符进行正向排序,在基于第一个域进行正向排序。和上一个例子比,第4和第5行交换了位置。
  44.     /> sort -t':' -k 6.2,6.4 -k 1 users
  45.     bin:x:1:1:bin:/bin:/sbin/nologin
  46.     root:x:0:0:root:/root:/bin/bash
  47.     daemon:x:2:2:daemon:/sbin:/sbin/nologin
  48.     adm:x:3:4:adm:/var/adm:/sbin/nologin
  49.     lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
  50.     #基于第一个域的第2个字符排序
  51.     /> sort -t':' -k 1.2,1.2 users   
  52.     daemon:x:2:2:daemon:/sbin:/sbin/nologin
  53.     adm:x:3:4:adm:/var/adm:/sbin/nologin
  54.     bin:x:1:1:bin:/bin:/sbin/nologin
  55.     root:x:0:0:root:/root:/bin/bash
  56.     lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
  57.     #基于第六个域的第2个字符到第4个字符进行正向排序,-u命令要求在排序时删除键值重复的行。
  58.     /> sort -t':' -k 6.2,6.4 -u users
  59.     bin:x:1:1:bin:/bin:/sbin/nologin
  60.     root:x:0:0:root:/root:/bin/bash
  61.     daemon:x:2:2:daemon:/sbin:/sbin/nologin
  62.     adm:x:3:4:adm:/var/adm:/sbin/nologin
  63.     /> cat /etc/passwd | wc -l  #计算该文件中文本的行数。
  64.     39
  65.     /> sed -n '35,$p' /etc/passwd > users2  #取最后5行并输出到users2中。
  66.     /> cat users2
  67.     sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
  68.     mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
  69.     pulse:x:496:494:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
  70.     gdm:x:42:42::/var/lib/gdm:/sbin/nologin
  71.     stephen:x:500:500:stephen:/home/stephen:/bin/bash
  72.     #基于第3个域字段以文本的形式排序
  73.     /> sort -t':' -k 3 users2
  74.     mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
  75.     gdm:x:42:42::/var/lib/gdm:/sbin/nologin
  76.     pulse:x:496:494:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
  77.     stephen:x:500:500:stephen:/home/stephen:/bin/bash
  78.     sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
  79.     #基于第3个域字段以数字的形式排序
  80.     /> sort -t':' -k 3n users2
  81.     mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
  82.     gdm:x:42:42::/var/lib/gdm:/sbin/nologin
  83.     sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
  84.     pulse:x:496:494:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
  85.     stephen:x:500:500:stephen:/home/stephen:/bin/bash
  86.     #基于当前系统执行进程的owner名排序,并将排序的结果写入到result文件中
  87.     /> ps -ef | sort -k 1 -o result
  88. 十三. 删除重复行的命令uniq:
  89.     uniq有3个最为常用的选项,见如下列表:
  90. 选项        命令描述
  91. -c        可在每个输出行之前加上该行重复的次数
  92. -d        仅显示重复的行
  93. -u        显示为重复的行
  94.     /> cat testfile
  95.     hello
  96.     world
  97.     friend
  98.     hello
  99.     world
  100.     hello
  101.     #直接删除未经排序的文件,将会发现没有任何行被删除
  102.     /> uniq testfile  
  103.     hello
  104.     world
  105.     friend
  106.     hello
  107.     world
  108.     hello
  109.     #排序之后删除了重复行,同时在行首位置输出该行重复的次数
  110.     /> sort testfile | uniq -c  
  111.     1 friend
  112.     3 hello
  113.     2 world
  114.     #仅显示存在重复的行,并在行首显示该行重复的次数
  115.     /> sort testfile | uniq -dc
  116.     3 hello
  117.     2 world
  118.     #仅显示没有重复的行
  119.     /> sort testfile | uniq -u
  120.     friend  
  121. 十四. 文件压缩解压命令tar:
  122.    1.  tar命令行选项
  123. 选项        命令描述
  124. -c        建立压缩档案
  125. -x        解压
  126. --delete        从压缩包中删除已有文件,如果该文件在包中出现多次,该操作其将全部删除。
  127. -t        查看压缩包中的文件列表
  128. -r        向压缩归档文件末尾追加文件
  129. -u        更新原压缩包中的文件
  130. -z        压缩为gzip格式,或以gzip格式解压
  131. -j        压缩为bzip2格式,或以bzip2格式解压
  132. -v        显示压缩或解压的过程,该选项一般不适于后台操作
  133. -f        使用档案名字,这个参数是最后一个参数,后面只能接档案名。
  134.     2.  tar使用实例:
  135.     #将当前目录下所有文件压缩打包,需要说明的是很多人都习惯将tar工具压缩的文件的扩展名命名为.tar
  136.     /> tar -cvf test.tar *
  137.     -rw-r--r--. 1 root root   183 Nov 11 08:02 users
  138.     -rw-r--r--. 1 root root   279 Nov 11 08:45 users2
  139.     /> cp ../*.log .                  #从上一层目录新copy一个.log文件到当前目录。
  140.     /> tar -rvf test.tar *.log     #将扩展名为.log的文件追加到test.tar包里。
  141.     /> tar -tvf test.tar
  142.     -rw-r--r-- root/root        183 2011-11-11 08:02 users
  143.     -rw-r--r-- root/root        279 2011-11-11 08:45 users2
  144.     -rw-r--r-- root/root     48217 2011-11-11 22:16 install.log
  145.     /> touch install.log           #使原有的文件更新一下最新修改时间
  146.     /> tar -uvf test.tar *.log    #重新将更新后的log文件更新到test.tar中
  147.     /> tar -tvf test.tar             #从输出结果可以看出tar包中多出一个更新后install.log文件。
  148.     -rw-r--r-- root/root         183 2011-11-11 08:02 users
  149.     -rw-r--r-- root/root         279 2011-11-11 08:45 users2
  150.     -rw-r--r-- root/root     48217 2011-11-11 22:16 install.log
  151.     -rw-r--r-- root/root     48217 2011-11-11 22:20 install.log
  152.     /> tar --delete install.log -f test.tar #基于上面的结果,从压缩包中删除install.log
  153.     -rw-r--r-- root/root       183 2011-11-11 08:02 users
  154.     -rw-r--r-- root/root       279 2011-11-11 08:45 users2
  155.     /> rm -f users users2      #从当前目录将tar中的两个文件删除
  156.     /> tar -xvf test.tar          #解压
  157.     /> ls -l users*                 #仅列出users和users2的详细列表信息
  158.     -rw-r--r--. 1 root root 183 Nov 11 08:02 users
  159.     -rw-r--r--. 1 root root 279 Nov 11 08:45 users2
  160.     #以gzip的格式压缩并打包,解压时也应该以同样的格式解压,需要说明的是以该格式压缩的包习惯在扩展名后加.gz
  161.     /> tar -cvzf test.tar.gz *
  162.     /> tar -tzvf test.tar.gz      #查看压缩包中文件列表时也要加z选项(gzip格式)
  163.     -rw-r--r-- root/root     48217 2011-11-11 22:50 install.log
  164.     -rw-r--r-- root/root         183 2011-11-11 08:02 users
  165.     -rw-r--r-- root/root         279 2011-11-11 08:45 users2
  166.     /> rm -f users users2 install.log
  167.     /> tar -xzvf test.tar.gz     #以gzip的格式解压
  168.     /> ls -l *.log users*
  169.     -rw-r--r-- root/root     48217 2011-11-11 22:50 install.log
  170.     -rw-r--r-- root/root         183 2011-11-11 08:02 users
  171.     -rw-r--r-- root/root         279 2011-11-11 08:45 users2
  172.     /> rm -f test.*                #删除当前目录下原有的压缩包文件
  173.     #以bzip2的格式压缩并打包,解压时也应该以同样的格式解压,需要说明的是以该格式压缩的包习惯在扩展名后加.bz2
  174.     /> tar -cvjf test.tar.bz2 *
  175.     /> tar -tjvf test.tar.bz2    #查看压缩包中文件列表时也要加j选项(bzip2格式)
  176.     -rw-r--r-- root/root     48217 2011-11-11 22:50 install.log
  177.     -rw-r--r-- root/root         183 2011-11-11 08:02 users
  178.     -rw-r--r-- root/root         279 2011-11-11 08:45 users2
  179.     /> rm -f *.log user*
  180.     /> tar -xjvf test.tar.bz2    #以bzip2的格式解压
  181.     /> ls -l
  182.     -rw-r--r--. 1 root root 48217 Nov 11 22:50 install.log
  183.     -rw-r--r--. 1 root root 10530 Nov 11 23:08 test.tar.bz2
  184.     -rw-r--r--. 1 root root     183 Nov 11 08:02 users
  185.     -rw-r--r--. 1 root root     279 Nov 11 08:45 users2
  186. 十五. 大文件拆分命令split:
  187.     下面的列表中给出了该命令最为常用的几个命令行选项:
  188. 选项        描述
  189. -l        指定行数,每多少分隔成一个文件,缺省值为1000行。
  190. -b        指定字节数,支持的单位为:k和m
  191. -C        与-b参数类似,但切割时尽量维持每行的完整性
  192. -d        生成文件的后缀为数字,如果不指定该选项,缺省为字母
  193.     /> ls -l
  194.     -rw-r--r--. 1 root root 10530 Nov 11 23:08 test.tar.bz2
  195.     /> split -b 5k test.tar.bz2     #以每文件5k的大小切割test.tar.bz2
  196.     /> ls -l                                #查看切割后的结果,缺省情况下拆分后的文件名为以下形式。
  197.     -rw-r--r--. 1 root root 10530 Nov 11 23:08 test.tar.bz2
  198.     -rw-r--r--. 1 root root   5120 Nov 11 23:34 xaa
  199.     -rw-r--r--. 1 root root   5120 Nov 11 23:34 xab
  200.     -rw-r--r--. 1 root root     290 Nov 11 23:34 xac
  201.     /> rm -f x*                         #删除拆分后的小文件
  202.     /> split -d -b 5k test.tar.bz2 #-d选项以后缀为数字的形式命名拆分后的小文件
  203.     /> ls -l
  204.     -rw-r--r--. 1 root root 10530 Nov 11 23:08 test.tar.bz2
  205.     -rw-r--r--. 1 root root   5120 Nov 11 23:36 x00
  206.     -rw-r--r--. 1 root root   5120 Nov 11 23:36 x01
  207.     -rw-r--r--. 1 root root     290 Nov 11 23:36 x02
  208.     /> wc install.log -l             #计算该文件的行数
  209.     /> split -l 300 install.log     #每300行拆分成一个小文件
  210.     /> ls -l x*
  211.     -rw-r--r--. 1 root root 11184 Nov 11 23:42 xaa
  212.     -rw-r--r--. 1 root root 10805 Nov 11 23:42 xab
  213.     -rw-r--r--. 1 root root 12340 Nov 11 23:42 xac
  214.     -rw-r--r--. 1 root root 11783 Nov 11 23:42 xad
  215.     -rw-r--r--. 1 root root   2105 Nov 11 23:42 xae
复制代码




目录:
Linux Shell常用技巧(一)
http://www.acejoy.com/thread-4312-1-1.html
一. 特殊文件: /dev/null和/dev/tty
二. 简单的命令跟踪
三. 正则表达式基本语法描述
四. 使用cut命令选定字段
五. 计算行数、字数以及字符数
六. 提取开头或结尾数行

Linux Shell常用技巧(二)
http://www.acejoy.com/thread-4313-1-1.html
七. grep家族

Linux Shell常用技巧(三)
http://www.acejoy.com/thread-4314-1-1.html
八. 流编辑器sed

Linux Shell常用技巧(四)
http://www.acejoy.com/thread-4315-1-1.html
九. awk实用功能
十. awk表达式功能

Linux Shell常用技巧(五)
http://www.acejoy.com/thread-4316-1-1.html
十一.awk编程

Linux Shell常用技巧(六)
http://www.acejoy.com/thread-4317-1-1.html
十二.行的排序命令sort
十三.删除重复行的命令uniq
十四.文件压缩解压命令tar
十五.大文件拆分命令split

Linux Shell常用技巧(七)
http://www.acejoy.com/thread-4318-1-1.html
十六.文件查找命令find
十七.xargs命令

Linux Shell常用技巧(八)
http://www.acejoy.com/thread-4319-1-1.html
十八.和系统运行状况相关的Shell命令

Linux Shell常用技巧(九)
http://www.acejoy.com/thread-4320-1-1.html
十九.和系统运行进程相关的Shell命令

Linux Shell常用技巧(十)
http://www.acejoy.com/thread-4321-1-1.html
二十.通过管道组合Shell命令获取系统运行数据
二十一.通过管道组合Shell命令进行系统管理

Linux Shell常用技巧(十一)
http://www.acejoy.com/thread-4322-1-1.html
二十二.交互式使用Bash Shell

Linux Shell常用技巧(十二)
http://www.acejoy.com/thread-4323-1-1.html
二十三.Bash Shell编程

您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-5-8 03:49 , Processed in 0.009397 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表