标签: shell

Linux Shell笔试题汇总

 

1、要求用shell分析Apache日志access_log,要求列出当天访问次数最多的IP,下面是典型的访问信息的log。用shell列出访问最多的20个ip:
 
180.168.41.175 - - [23/Aug/2011:14:47:37 -0400] "GET / HTTP/1.0" 200 654
216.35.116.91 - - [23/Aug/2011:14:47:37 -0400] "GET / HTTP/1.0" 200 654
124.90.136.42 - - [23/Aug/2011:14:47:37 -0400] “GET / HTTP/1.1″ 200 44
 
=========================Answer=========================
1、awk -F  '{print $1}' access_log  |uniq -c | sort -rn | head -20
     或:cut -d- -f 1 access_log |uniq -c | sort -rn | head -20
原理:
       cut
       -d, -delimiter=DELIM
              use DELIM instead of TAB for field delimiter
              表示用-分割,然后-f 1 
       -f, -fields=LIST
              select only these fields;  also print any line that contains  no
              delimiter character, unless the -s option is specified
           表示打印第一部分,就是ip
 uniq 是将重复行去掉, -c表示前面前面加上数目,
       sort -rn 就是按照数字从大到小排序,
       head -20取前面20行
       
         最后打印的结果大概是这样:
                   217 192.114.71.13
                   116 124.90.132.65
                   108 192.114.71.13