2017-04-18 4 views
0

나는 티클을 사용하여 새 그리고 난 다음 스크립트가 있습니다동일한 tcl 스크립트에서 파일을 다운로드하여 사용하는 방법은 무엇입니까?

proc prepare_xml {pdb_id} { 

    set filename [exec wget ftp://ftp.ebi.ac.uk/pub/databases/msd/sifts/xml/$pdb_id.xml.gz] 

    set filename_unzip [exec gunzip "$pdb_id.xml.gz"] 

    set ready_xml [exec sed -i "/entry /c\<entry>" "$pdb_id.xml"] 

    return $ready_xml 
} 

예상되는 출력 파일 "파일 이름"압축을 수정입니다. 그러나 처음 실행하면 파일을 다운로드 만하고 압축을 풀지는 않습니다. 두 번째로 실행하면 원래 다운로드 한 파일의 예상 출력과 두 번째 복사본을 얻었습니다.

아무도 도와 줄 수 있습니까? 나는 after와 vwait 명령으로 시도했지만 작동하지 않습니다.

그것은 당신이 오류가 발생되는지 여부를 설명하지 않는로 확실히 말할 어렵다

답변

0

(즉 코드가 실행을 완료하지 수있는 유일한 이유는 것)을 :) 감사,하지만 난 '

proc prepare_xml {pdb_id} { 
    # Double quotes on next line just because of Stack Overflow highlighter 
    set url "ftp://ftp.ebi.ac.uk/pub/databases/msd/sifts/xml/$pdb_id.xml.gz" 
    set file $pdb_id.xml 
    append sedcode {/entry /} "c\\\n" {<entry>} 
    exec wget -q -O - $url | gunzip -c | sed $sedcode > $file 
    return $file 
} 

는 첫째, 내가 너무 오래 점점에서 exec 라인을 정지 (로컬) 변수의 복잡한 비트를 유지하고있어이 같은 것이 올바른 접근 방식이 될 것으로 예상 거라고. 두 번째로, 모든 하위 프로세스를 하나의 파이프 라인에 함께 넣었습니다. 셋째, -q-O -wget, -cgunzip으로 사용하고 있습니다. 그들이 당신을 이해하지 못한다면 그들이하는 일을 찾아보십시오. 넷째, 백 슬래시에 문제가 발생하지 않도록 가능한 한 중괄호에 sed의 스크립틀릿을 넣었지만, append 및 백 슬래시가 아닌 섹션을 사용하여 패턴을 만들었습니다. sed에서 c의 구문이 으로 잘못 되었기 때문입니다. 내가 나를 위해 그것을하는 경우 추출하고 데이터를 변환 할 수 실제로 사용의 기본은 Tcl 코드를 거라고


(가 ... 직후에 적어도 일부 플랫폼에서 백 슬래시 - 개행 문자 순서를 필요로)하지만, 그것은 다소 큰 변화입니다.