如何在排序时提取和计算URL?

时间:2013-09-20 05:50:37

标签: bash shell sed awk grep

我在很长一段时间内收集了大量使用wget收集的网页,我需要分析收藏品,以便我:

1) extract all URLs, 
2) format them in a unified fashion,
3) count occurrences of URLs (both base domain and with full path; two separate outputs), and
4) sort output from highest occurring to lowest

例如,在#2上,我的网址可能类似http%3A%2F%2Fblah.com%2Fworld%2Fnewsblah.com/world/newswww.blah.com/world/newshttp://www.blah.com/world/news/或任何此类变体。这些都需要被脚本视为相同的基本域和完整路径。

最终它应该输出两个不同的列表,如:

Based Domains Only:
424 http://youtube.com
325 http://facebook.com
200 http://digg.com
124 http://twitter.com
90  http://news.google.com

Unique URL:
254 http://facebook.com/mypage
123 http://news.google.com/Some-Big-Story
50  http://twitter.com/mrpopular
3   http://youtube.com/some-crazy-video

我在grep上尝试了几种变体,并且已经撞到了一些墙壁。此外,我在获取各种URL转换和标准化方面遇到了一些问题,以便比较正常工作并最终正确计数。

你会采取什么方法来解决这个问题?

* 注意我想通过shell执行此操作。我可以用Ruby来写这个,但是这部分是一个练习,看看如何用各种有用的命令/工具更好地融合shell中的各种“肌肉”。 < / p>

3 个答案:

答案 0 :(得分:4)

使用awk

cat file
http://www.blah.com/world/news/
http://www.blah.com/world/news/test
http://www.google.com/test/sub
http://www.google.com/tet1
http://www.google.com/no
http://www.blah.com/world/news/
http://www.blah.com/world/news/

URL

awk '{ a[$0]++ } END {for (i in a) print a[i], i }' file | sort -nr
3 http://www.blah.com/world/news/
1 http://www.google.com/tet1
1 http://www.google.com/test/sub
1 http://www.google.com/no
1 http://www.blah.com/world/news/test

awk -F\/ '{ a[$1"//"$3]++ } END {for (i in a) print a[i], i }' file | sort -nr
4 http://www.blah.com
3 http://www.google.com

答案 1 :(得分:0)

编写一个解析这些文件的PHP脚本(我喜欢DomCrawler symfony组件,但您可以使用内置的DOMDocument)并将URL粘贴到数据库中,然后您可以查询结果

如果您不想使用MySQL,可以使用sqlite进行嵌入式方法

答案 2 :(得分:0)

使用 Jotne 输入的coreutils方式:

$ sort file | uniq -c
      3 http://www.blah.com/world/news/
      1 http://www.blah.com/world/news/test
      1 http://www.google.com/no
      1 http://www.google.com/test/sub
      1 http://www.google.com/tet1

$ cut -d/ -f1-3 file | sort | uniq -c
      4 http://www.blah.com
      3 http://www.google.com