Chinaunix首页 | 论坛 | 博客
  • 博客访问: 75095
  • 博文数量: 44
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 0
  • 用 户 组: 普通用户
  • 注册时间: 2016-09-19 16:49
文章分类

全部博文(44)

文章存档

2018年(2)

2017年(1)

2016年(41)

我的朋友

分类: 系统运维

2016-04-29 17:25:56


  1. linux sort,uniq,cut,wc命令详解
  2. sort
  3. sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出。如果 File 参数指定多个文件,那么 sort 命令将这些文件连接起来,并当作一个文件进行排序。

  4. sort语法

  5. [root@www ~]# sort [-fbMnrtuk] [file or stdin]
  6. 选项与参数:
  7. -f :忽略大小写的差异,例如 A 与 a 视为编码相同;
  8. -b :忽略最前面的空格符部分;
  9. -M :以月份的名字来排序,例如 JAN, DEC 等等的排序方法;
  10. -n :使用『纯数字』进行排序(默认是以文字型态来排序的)
  11. -r :反向排序;
  12. -u :就是 uniq ,相同的数据中,仅出现一行代表;
  13. -t :分隔符,默认是用 [tab] 键来分隔;
  14. -k :以那个区间 (field) 来进行排序的意思

  15. 对/etc/passwd 的账号进行排序
  16. [root@www ~]# cat /etc/passwd | sort
  17. adm:x:3:4:adm:/var/adm:/sbin/nologin
  18. apache:x:48:48:Apache:/var/www:/sbin/nologin
  19. bin:x:1:1:bin:/bin:/sbin/nologin
  20. daemon:x:2:2:daemon:/sbin:/sbin/nologin
  21. sort 是默认以第一个数据来排序,而且默认是以字符串形式来排序,所以由字母 a 开始升序排序。

  22.  

  23. /etc/passwd 内容是以 : 来分隔的,我想以第三栏来排序,该如何

  24. [root@www ~]# cat /etc/passwd | sort -t ':' -k 3
  25. root:x:0:0:root:/root:/bin/bash
  26. uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
  27. operator:x:11:0:operator:/root:/sbin/nologin
  28. bin:x:1:1:bin:/bin:/sbin/nologin
  29. games:x:12:100:games:/usr/games:/sbin/nologin
  30. 默认是以字符串来排序的,如果想要使用数字排序:

  31. cat /etc/passwd | sort -t ':' -k 3n
  32. root:x:0:0:root:/root:/bin/bash
  33. daemon:x:1:1:daemon:/usr/sbin:/bin/sh
  34. bin:x:2:2:bin:/bin:/bin/sh
  35. 默认是升序排序,如果要倒序排序,如下

  36. cat /etc/passwd | sort -t ':' -k 3nr
  37. nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
  38. ntp:x:106:113::/home/ntp:/bin/false
  39. messagebus:x:105:109::/var/run/dbus:/bin/false
  40. sshd:x:104:65534::/var/run/sshd:/usr/sbin/nologin
  41.  

  42. 如果要对/etc/passwd,先以第六个域的第2个字符到第4个字符进行正向排序,再基于第一个域进行反向排序。

  43. cat /etc/passwd | sort -t':' -k 6.2,6.4 -k 1r
  44. sync:x:4:65534:sync:/bin:/bin/sync
  45. proxy:x:13:13:proxy:/bin:/bin/sh
  46. bin:x:2:2:bin:/bin:/bin/sh
  47. sys:x:3:3:sys:/dev:/bin/sh
  48.  

  49. 查看/etc/passwd有多少个shell:对/etc/passwd的第七个域进行排序,然后去重:

  50. cat /etc/passwd | sort -t':' -k 7 -u
  51. root:x:0:0:root:/root:/bin/bash
  52. syslog:x:101:102::/home/syslog:/bin/false
  53. daemon:x:1:1:daemon:/usr/sbin:/bin/sh
  54. sync:x:4:65534:sync:/bin:/bin/sync
  55. sshd:x:104:65534::/var/run/sshd:/usr/sbin/nologin
  56.  

  57. uniq
  58.  uniq命令可以去除排序过的文件中的重复行,因此uniq经常和sort合用。也就是说,为了使uniq起作用,所有的重复行必须是相邻的。

  59. uniq语法

  60. [root@www ~]# uniq [-icu]
  61. 选项与参数:
  62. -i :忽略大小写字符的不同;
  63. -c :进行计数
  64. -u :只显示唯一的行
  65.  

  66. testfile的内容如下

  67. cat testfile
  68. hello
  69. world
  70. friend
  71. hello
  72. world
  73. hello
  74.  

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

  76. #uniq testfile
  77. hello
  78. world
  79. friend
  80. hello
  81. world
  82. hello

  83. 排序文件,默认是去重

  84. #cat testfile | sort |uniq
  85. friend
  86. hello
  87. world
  88.  

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

  90. #sort testfile | uniq -c
  91. 1 friend
  92. 3 hello
  93. 2 world
  94.  

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

  96. #sort testfile | uniq -dc
  97. 3 hello
  98. 2 world
  99.  

  100. 仅显示不重复的行

  101. sort testfile | uniq -u
  102. friend
  103.  

  104. cut
  105. cut命令可以从一个文本文件或者文本流中提取文本列。

  106. cut语法

  107. [root@www ~]# cut -d'分隔字符' -f fields <==用于有特定分隔字符
  108. [root@www ~]# cut -c 字符区间 <==用于排列整齐的信息
  109. 选项与参数:
  110. -d :后面接分隔字符。与 -f 一起使用;
  111. -f :依据 -d 的分隔字符将一段信息分割成为数段,用 -f 取出第几段的意思;
  112. -c :以字符 (characters) 的单位取出固定字符区间;
  113.  

  114. PATH 变量如下

  115. [root@www ~]# echo $PATH
  116. /bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin:/usr/games
  117. # 1 | 2 | 3 | 4 | 5 | 6 | 7
  118.  

  119. 将 PATH 变量取出,我要找出第五个路径。

  120. #echo $PATH | cut -d ':' -f 5
  121. /usr/local/bin
  122.  

  123. 将 PATH 变量取出,我要找出第三和第五个路径。

  124. #echo $PATH | cut -d ':' -f 3,5
  125. /sbin:/usr/local/bin
  126.  

  127. 将 PATH 变量取出,我要找出第三到最后一个路径。

  128. echo $PATH | cut -d ':' -f 3-
  129. /sbin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin:/usr/games
  130.  

  131. 将 PATH 变量取出,我要找出第一到第三个路径。

  132. #echo $PATH | cut -d ':' -f 1-3
  133. /bin:/usr/bin:/sbin:
  134.  
  135.  

  136. 将 PATH 变量取出,我要找出第一到第三,还有第五个路径。

  137. echo $PATH | cut -d ':' -f 1-3,5
  138. /bin:/usr/bin:/sbin:/usr/local/bin
  139.  

  140. 实用例子:只显示/etc/passwd的用户和shell

  141. #cat /etc/passwd | cut -d ':' -f 1,7
  142. root:/bin/bash
  143. daemon:/bin/sh
  144. bin:/bin/sh

  145.  wc
  146. 统计文件里面有多少单词,多少行,多少字符。

  147. wc语法

  148. [root@www ~]# wc [-lwm]
  149. 选项与参数:
  150. -l :仅列出行;
  151. -w :仅列出多少字(英文单字)
  152. -m :多少字符;

  153. 默认使用wc统计/etc/passwd

  154. #wc /etc/passwd
  155. 40 45 1719 /etc/passwd
  156. 40是行数,45是单词数,1719是字节数
  157.  

  158. wc的命令比较简单使用,每个参数使用如下:

  159. #wc -l /etc/passwd #统计行数,在对记录数时,很常用
  160. 40 /etc/passwd #表示系统有40个账户

  161. #wc -w /etc/passwd #统计单词出现次数
  162. 45 /etc/passwd

  163. #wc -m /etc/passwd #统计文件的字节数
  164. 1719
阅读(869) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~