0

我收集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/或任何此类变体的 URL。这些都需要被脚本视为相同的基域和完整路径。

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

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 中的各种“肌肉”,这些命令/工具将把它们组合在一起。

4

3 回答 3

5

使用 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/

网址

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
于 2013-09-20T05:59:49.213 回答
0

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

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

于 2013-09-20T06:02:05.410 回答
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
于 2013-09-20T10:23:13.947 回答