2014-06-06 3 views
0

변수에 HTML 묶음을 축적 한 gawk 스크립트가 있습니다. 이제 시스템 명령을 통해 lynx로 파이프해야합니다.필터링되지 않은 텍스트를 awk 시스템 명령의 표준 입력으로 배관

(while read LINE;가) 격렬하게 (나쁜 느린했다 ... AWK 나쁜 솔루션입니다 말해 주시기 때문에,이 2 소요됩니다) 내가 AWK이 시도

을 :

cmd = sprintf("bash -c \'lynx -dump -force_html -stdin <<< \"%s\"\'", html) 
    system (cmd) 

나쁜 아이디어는 단순한 테스트 케이스가 작동하더라도 원시 HTML, 특수 문자 문제 및 문자열 종료 문제가 많으며 이스케이프 내에서 이스케이프 내에서 이스케이프가 복잡 해지는 것입니다.

lynx는 stdin에서 무엇을 던져도 처리 할 수 ​​있습니다. 명령 행을 통해 awk을 stdin으로 가져올 수는 없지만 다루기 힘든 해결책처럼 보입니다.

내가 원하는 것은 HTML 블록 사이의 구분 기호로 큰 텍스트 파일에서 HTML을 구문 분석하는 것입니다 경우 AWK에서 (내 최종 목표에 대한 세부 사항을 추가)


편집은 좋은 방법이 아니다. 필자는 HTML의 각 블록을 lynx에 전달하여 형식을 지정하고 새로운 큰 텍스트 파일로 덤프해야합니다.


예 입력 (다른 시스템에서 덤프)

**********URL: http://some/url 
<html> 
<head><title>Any 'ol HTML document</title</head> 
<body> 
<p>With pretty much any character you can imagine at some point</p> 
<p>I'm using lynx to strip off the HTML and give me a nice format</p> 
</body> 
</html> 
**********URL: http://another/url 
<html><head><title>My input file provides a few 100,000 such html documents</title></head> 
<body/></html> 

각 HTML 문서 lynx -dump 통해 공급한다. Lynx는 파일 (예 : 명명 된 파이프 또는 파일이 옵션 임) 또는 stdin (-stdin 옵션 사용)에서 HTML을 읽을 수 있습니다.

내 출력은 다음과 같습니다

**********URL: http://some/url 
    Any 'ol HTML document 

    With pretty much any character you can imagine at some point 
    I'm using lynx to strip off the HTML and give me a nice format 
**********URL: http://another/url 
    My input file provides a few 100,000 such html documents 
+1

http://mywiki.wooledge.org/XyProblem –

+0

찬성이, 그 좋은 답변입니다 및 나는 계속 나아갈 것이다. 그러나 awk는 크고 상대적으로 초보자이기 때문에 묻지 않고 확실히 알 수 있습니다. 너는 그것을 말할만큼 충분히 awk을 안다? –

+4

'HTML 묶음'이 무엇인지, 그리고 샘플 입력/출력에서'lynx '가 할 것으로 기대되는 것에 대해 자세히 설명해 줄 수 있습니까? 또한 - 오늘날 gawk (http://www.gnu.org/software/gawk/manual/html_node/Two_002dway-I_002fO.html#Two_002dway-I_002fO) 보조 프로세스에 대한 [[| 여기] (http://stackoverflow.com/q/24066356/1259917)) 당신이 사용할 수있는 것처럼 보입니다. – n0741337

답변

1

내가 here에서에 대해 알게 |& in gawk.을보십시오. 그렇게하면 gawk의 출력을 다른 명령의 표준으로 공동 처리로 보낼 수 있습니다.

+0

우아한 10 줄짜리 gawk 스크립트로 모든 임베디드 HTML 문서를 lynx로 파싱한다는 목표를 달성했습니다. (반쪽은 코 프로세스를 열고 닫는 데에만 헌신했습니다.)이 힌트는 매우 도움이되었습니다! –

0

n0741337의 대답에 추가하려면 gowk 코 프로세서를 사용한 예가 있습니다. 답을 읽은 다음 stdin에서 "aline"을 가져 와서 cat coprocess로 파이프하고 cat coprocess의 출력을 캡처하여 인쇄합니다 :

printf "aline" | awk ' 
    BEGIN{cmd="cat"} 
    { 
    print $0 |& cmd; 
    close(cmd, "to"); 
    while ((cmd |& getline line) > 0) { 
     print "got", line 
    }; 
    close (cmd); 
    }' 

result: got aline 

둔한 설명서는이 기능에 대한보다 폭 넓은 토론이 있습니다 AWK의 해결책이 존재하지 않는 경우는 http://www.gnu.org/software/gawk/manual/html_node/Two_002dway-I_002fO.html#Two_002dway-I_002fO

관련 문제