0

我有一个不断附加以下 xml 的文件。我想从变量中得到的是 jobStatus 中的 percentComplete 。我怎么会得到那个?不知道如何解析xml。我尝试使用 XMLStarlet 但失败了。我想在我可以在 shell 中使用的变量中获取 percentComplete 。

<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>
4

2 回答 2

1

在此处查看类似的帖子:使用 unix 终端解析 XML

如果您不习惯 XML/XSLT 并且您不想学习解析它,那么您可以通过搜索来做相当肮脏的事情并删除答案。

另一种选择......我会推荐 Xerces 解析器,但还有其他的。检查上面的链接,因为那里提到了这两种技术。

于 2012-01-23T18:01:40.240 回答
1

你可以试试这样的 -

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
于 2012-01-23T18:05:26.143 回答