2012-07-31 3 views
0

이 질문에 대한 대답은 입니다. 첫 번째 인수로 URL을 사용하고 HTML의 호스트/도메인 당 링크 수에 대한 통계를 인쇄합니다. URL. 그것이웹 페이지의 도메인을 반환하는 Linux 스크립트

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

뭔가를 인쇄 할 수 www.bbc.co.uk 같은 URL 지정된 인스턴스에 대한 그래서

, 그것은 검사, 모든 링크를 꺼내 페이지의 HTML을 분석한다 href 속성을 사용하고 어떤 도메인이 동일한 도메인인지 (물론 당연한 것임), 그리고 어떤 도메인이 외국인지를 결정한 다음 로컬 도메인과 원격 도메인에 대한 통계를 생성합니다.

규칙 : 스크립트에 표준 Linux 명령 세트를 사용할 수 있습니다. C, Python 또는 Perl과 같은 상위 레벨 프로그래밍 언어는 사용할 수 없습니다. 당신은 그러나 다음과 같이

내가 솔루션을 내놓았다 등 AWK, 나오지도를 사용할 수있다 :

#!/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은 있지만 도메인은보고하지 않습니다. " 내 목표를 달성 할 수 있도록 저를 도울 수있는 사람이 있습니까? 나는 무엇을 놓치고 스크립트가 무엇을하지 못하고 있는가? 나는 내가 필요로하는 것처럼 작동하게 만들었다 고 생각했다.

+1

어떻게 쉘 스크립트보다는 C 높은 수준은? – tripleee

+0

잘 그 지시가 말했던 것. 나도 어떻게 보지 않는다. :) – roykasa

+1

많은 수의 임시 파일을 피하거나 나중에 정리해야합니다. 또한 일반적으로 처음부터 입력을 정규화합니다. 즉, 'href'를 추출 할 때 'sort'에 입력하기 전에 도메인 이름 만 잘라내십시오. awk를 사용하면 awk에서 가능한 한 많이하고 grep | grep |을 없애는 것이 중요합니다. 잘라 내기 | 야다 야다. – tripleee

답변

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 
+0

... news, newsvote 및 www.bbc.co.uk의 결과를 'bbc.co.uk'에 대한 단일 숫자로 합계하거나 합산하십시오. 하지만 일반적인 경우에는 꽤 어렵습니다. (방금 작성한 'www.in.caaq'와 같은 최상위 도메인 이름이 무엇인지 어떻게 알 수 있습니까?) – tripleee

+0

@tripleee 예이 문제가 발생했습니다. 나뿐만 아니라, OP 설명은 강사가 도메인이라고 생각하는 것을 정의하지 않습니다. –

+0

예 예하기가 어렵지만 문제는 그것을하는 방법입니다. Michael은 먼저 내 출력을 두 번째 옵션에서 제안한 것과 같게하려고합니다. 나는 그것을 할 수있는 코드를 얻을 수 있습니까? 나는 시도하고 달성하기 쉬운 일이 아니다. – roykasa

관련 문제