shell基础之书写需要用到的小工具

一、简单介绍

下面介绍几个可能不太常用但是面试题经常会用用到的小工具:

命令:cut
作用:截取某一个字段
  '-d' 后面跟分隔字符,把字段分割为若干个区间。
  '-c' 后面接的是第几个字符,也可以是一个区间n1-n2,还可以是多个数字n1,n2,n3.
  '-f' 后面接的是第几个区块,区块由分隔符分隔开.

示例:使用cut以
":"为分隔符,截出/etc/passwd的第三段字符 cut -d: -f3 /etc/passwd
命令:sort
作用:用作排序
  '  ' 后面不跟参数默认对每一段的首字母进行ASCII升序排序
  '-t' 后面跟分隔符,用分隔符把字段分割为若干区间。跟cut的-d一个意思
  '-n' 使用纯数字排序
  '-r' 反向排序
  '-u' 去重复,有点类似uniq -c,更多使用的是后者
  '-kn1,n2' 由n1区间排序到n2区间,可以只写-kn1,即对n1字段排序,需要跟-t连用

示例:使用sort以
":"为分隔符,对/etc/passwd文件的第5段排序 sort -t: -k5 /etc/passwd
命令:wc
作用:用于统计文档的行数、字符数、词数
  '-l' 统计行数
  '-m' 统计字符数
  '-w' 统计词数
命令:uniq
作用:去处重复的行,最常用的功能就这个
  '-c ' 统计重复的行数,并把行数写在前面

注意:使用uniq 的前提是需要先给文件排序,否则不管用。
命令:tr [-ds]
作用:替换字符
  '-d' 后跟需要删除的某个字符
  '-s' 把重复的字符去掉

示例:把大写变成小写 head
-n2 /etc/passwd |tr '[a-z]' '[A-Z]'
命令:tee filename
作用:把文件写入后面所跟的文件中的同时,还显示在屏幕上
      类似与重定向 “>”, 但是比重定向多了显示的功能

示例:如何把一个命令的输出内容不仅打印到屏幕上而且还可以重定向到一个文件内? cat
/etc/passwd |tee 2.txt
命令:split [-bl][num] filename NameYouWant
作用:切割文档
  '-b' 依据大小分割文档,单位为byte,如果要以M为单位,可以这样写:split -b 10M file
  '-l' 依据行数来分割文档


注意:如果split不指定目标文件名,则会以xaa,xab...这样的文件名存取切割后的文件 如果split指定了目标文件名,如Test,则会以Testaa,Testab来命名切割后的文件

 

二、实例

    通过Apache访问日志access.log统计IP和每个地址访问的次数,按照访问量列出前十名。日志格式样例如下:

192.168.1.247 - - [02/[ul/2015:23:44:59  [0800] "GET /[HTTP/1.1  200  19]"
答案如下:
   awk '{print $1}' access.log|sort|uniq -c|sort -nr|head

 

posted @ 2016-11-06 12:02  ImJerryChan  阅读(518)  评论(0编辑  收藏  举报