设为首页 收藏本站
查看: 991|回复: 0

Linux Shell常用技巧(六) sort uniq tar split-442938684

[复制链接]

尚未签到

发表于 2018-8-28 09:06:59 | 显示全部楼层 |阅读模式
Linux Shell常用技巧(六) sort uniq tar split
  十二.   行的排序命令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 1指定基于第一个字段正向排序(字段顺序从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


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-557545-1-1.html 上篇帖子: Linux Shell常用技巧(四) awk-442938684 下篇帖子: Linux Shell常用技巧(七) find xargs-442938684
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

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