0

我的任务是处理这个问题:编写一个 bash 脚本,将 URL 作为其第一个参数,并在 URL 的 HTML 中打印出每个主机/域的链接数的统计信息。

因此,例如给定一个像 www.bbc.co.uk 这样的 URL,它可能会打印出类似的东西

www.bbc.co.uk: 45
bbc.com: 1
google.com: 2
Facebook.com: 4

也就是说,它应该分析页面的 HTML,拉出所有链接,检查 href 属性,确定哪些链接是指向同一个域的(当然是指那个),哪些是外来的,然后为本地的和远程的。

规则:您可以在脚本中使用任何一组标准 Linux 命令。您不得使用任何高级编程语言,例如 C、Python 或 Perl。但是,您可以使用 awk、sed 等。

我想出了如下解决方案:

#!/bin/sh

echo "Enter a url eg www.bbc.com:"
read url
content=$(wget "$url" -q -O -)
echo "Enter file name to store URL output"
read file
echo $content > $file
echo "Enter file name to store filtered links:"
read links
found=$(cat $file | grep -o -E 'href="([^"#]+)"' | cut -d'"' -f2 | sort | uniq | awk '/http/' > $links)
output=$(egrep -o '^http://[^/]+/' $links | sort | uniq -c > out)
cat out

然后我被告知“我必须查看数据,然后检查您的程序是否能够令人满意地处理所有场景。这会报告 URL,但没有域”是否有人可以帮助我或为我指明正确的方向这样我才能实现我的目标?我错过了什么或脚本没有做什么?我以为我已经让它按要求工作了。

4

1 回答 1

0

您的脚本的输出是:

      7 http://news.bbc.co.uk/
      1 http://newsvote.bbc.co.uk/
      1 http://purl.org/
      8 http://static.bbci.co.uk/
      1 http://www.bbcamerica.com/
     23 http://www.bbc.com/
    179 http://www.bbc.co.uk/
      1 http://www.bbcknowledge.com/
      1 http://www.browserchoice.eu/

我认为他们的意思是它应该看起来更像:

      7 news.bbc.co.uk
      1 newsvote.bbc.co.uk
      1 purl.org
      8 static.bbci.co.uk
      1 www.bbcamerica.com
     23 www.bbc.com
    179 www.bbc.co.uk
      1 www.bbcknowledge.com
      1 www.browserchoice.eu
于 2012-07-31T05:58:56.453 回答