日期:2014-05-16  浏览次数:20788 次

grep命令求解释,Shell Script的一段程序
题目: 
      一个文本文件website里有aa,bb,cc,aa,bbb(每行一个字符串)等 相关的字符串,写出命令来查找出这个文本中都有哪些字符串及各字符串的个数并按个数的多少从多到少依序排序输出

     website里的内容:
aa
bb
aa
cc
bb
aa
   生成的文件strsorted.txt内容为(即结果)为:
string     count
aa          3
bb          2
cc          1

      我写的shell脚本如下:

#!/bin/bash  
  
  
foo()  
{  
    if [ $# -ne 1 ];  
    then  
        echo "Usage:$0 filename";   
        exit -1  
    fi  
  
  
grep * website | awk '{ count[$0]++ } END { printf("%s %s\n","website","count"); for(ind in count) { printf("%s %d\n",ind,count[ind]); } }' | sort -nrk 2 >strsorted.txt;  
  
  
}  
  
  
foo website 


 执行后在strsorted.txt中的内容为:

website     count



并没有统计出最终正确的结果,我认为是第一句“grep * website”写的有问题,请问如何修改?


PS;我参考了http://blog.csdn.net/guaguastd/article/details/8332757
 使用shell统计出出现次数排名top10的网址,测试执行正确。
其中不明白的地方是:

egrep -o "http://[a-zA-Z0-9.]+\.[a-zA-Z]{2,3}" website

(1) egrep的参数中 -o代表?我网查没有找到 -o
(2) 正则表达式中http://[a-zA-Z0-9.]+\.[a-zA-Z]{2,3}  中[a-zA-Z0-9.]最后还带 有一个点'.'是针对网址中的.吗?
     \. 转义字符加上点,我理解应该为eg:http://www.163.com 中的第一个点,但{2,3}是什么意思呢?求解释,谢谢



     
------解决方案--------------------
简单点:sort website 
------解决方案--------------------
 uniq -c