2012-01-23 3 views
0

다음 xml을 계속 추가하는 파일이 있습니다. 변수로 얻고 자하는 것은 jobStatus의 percentComplete입니다. 나는 그것을 어떻게 얻을 것입니까? XML을 구문 분석하는 방법을 모릅니다. XMLStarlet을 사용해 보았지만 실패했습니다. 나는 쉘에서 사용할 수있는 변수에 percentComplete를 가져오고 싶습니다.xml 하나의 값을 파싱합니다.

<batchStatus name="" submissionTime="1/23/12 10:00:26 AM" sentBy="mike" 
timeElapsed="43 second(s)" timeRemaining="4 minute(s)" timeElapsedSeconds="43" 
timeRemainingSeconds="294" percentComplete="12" resumePercentComplete="0" 
status="Processing" batchid="FD66DC21-6AA4-47FB-A3F0-7300C7BDAB8A" /batchStatus> 
<jobStatus name="file.mov" submissionTime="1/23/12 10:00:26 AM" sentBy="mike" 
jobType="Compressor" priority="HighPriority" timeElapsed="43 second(s)" 
timeRemaining="4 minute(s)" timeElapsedSeconds="43" timeRemainingSeconds="294" 
percentComplete="12" resumePercentComplete="0" status="Processing: Transcoding" 
jobid="FDF1A488-51B9-4B9A-908B-FD5D95CE7E92" 
batchid="FD66DC21-6AA4-47FB-A3F0-7300C7BDAB8A" /jobStatus> 
+0

? xmlstarlet의 --help를 시도했는데 알아 내지 못했습니다 ... 그 태그에 대한 링크가 도움이 될 것입니다. – user983223

+0

@ user983223 그가 의미 한 바는'xmlstartlet'에 대한 태그가있어서 질문에 전문가가 가능한 한 최상의 방법으로 당신을 도울 수 있다는 것입니다. 그 태그를 추가했습니다. :) –

+0

xmlstarlet은 모든 유효한 XML 문서를 원하기 때문에 최선이 아닙니다. 이는 모든 것을 묶는 단일 루트 태그를 의미합니다. 추가 태그를 시작하면 더 이상 유효한 XML이 아닙니다. 덕분에 – npostavs

답변

1

-

당신이 xmlstarlet에 대한 "태그"가 무엇을 의미합니까 @shellter
var=$(awk -v FS="[ =\"]" '/^<jobStatus/,/\/jobStatus>$/{for (i=1;i<=NF;i++) if ($i~/percentComplete/) print $(i+2)}' file | tail -n 1) 
[jaypal:~/Temp] echo $var 
12 
+0

문제는 XML 파일에 새 데이터가 지속적으로 추가된다는 것입니다. 그래서 당신이 쓴 것을 실행하면 마지막 값뿐만 아니라 모든 백분율 값을 얻을 수 있습니다. – user983223

+0

@ user983223 해결되었습니다. 새로운 솔루션을 사용해보십시오. –

1

여기에 유사한 게시물을 참조 : Parsing XML using unix terminal 당신은 XML/XSLT에 익숙하지 않는 당신은 당신이 아주 더러운을하고 잘라 수를 구문 분석하는 법을 배워야하지 않으려면

검색을 통한 대답.

다른 옵션 ... 나는 Xerces 파서를 권장하지만 다른 것들도 있습니다. 위의 링크를 확인하십시오.이 두 기술이 모두 언급 되었기 때문입니다.

당신은 이런 식으로 뭔가를 시도 할 수 있습니다
+0

. 나는 그 지위를 얼마 전에 보았다. 그것이 xmlstarlet을 발견 한 곳입니다. 올바르게 사용하는 방법을 알아낼 수 없습니다. 나는 도움을 주었다 - 도움이된다. 그러나 그것은 나에게 약간 혼란 스럽다. – user983223

관련 문제