此示例显示了输出文件的更大t
xmlstarlet fo jira-output.xml | egrep 'hours|username|worklog|work_date' | egrep -v 'external|time' | head -20
给我大概这个:
#<worklogs date_from="2014-06-01 00:00:00" date_to="2014-06-30 23:59:59" number_of_worklogs="222" format="xml" diffOnly="false" errorsOnly="false" validOnly="false" addBillingInfo="false" addIssueSummary="false" addIssueDescription="false" duration_ms="106" headerOnly="false" userName="" addIssueDetails="false" addParentIssue="false" addUserDetails="false" addWorklogDetails="false" billingKey="" issueKey="" projectKey="">
# <worklog>
# <worklog_id>15650</worklog_id>
# <hours>0.11666667</hours>
# <work_date>2014-06-07</work_date>
# <username>cadalso</username>
# </worklog>
# <worklog>
# <worklog_id>15653</worklog_id>
# <hours>0.2</hours>
# <work_date>2014-06-07</work_date>
# <username>cadalso</username>
# </worklog>
# <worklog>
# <worklog_id>15941</worklog_id>
# <hours>4.0</hours>
# <work_date>2014-06-17</work_date>
# <username>mrjcleaver</username>
# </worklog>
# <worklog>
#</worklogs>
这很好地执行,总计
xmlstarlet sel -T -t -v "sum(worklogs/worklog/hours)" --nl jira-output.xml
这个总数是不同的,但仅仅因为XML文件中有更多行
4.31666667
但是以下
xmlstarlet sel -T -t -m /worklogs/worklog/worklog_id -v "concat('|',/worklogs/worklog/staff_id,' | ', /worklogs/worklog/worklog_id,' | ',/worklogs/worklog/work_date,' | ',/worklogs/worklog/hours,' |')" --nl jira-output.xml
节目:
#| cadalso | 15650 | 2014-06-07 | 0.11666667 |
#| cadalso | 15650 | 2014-06-07 | 0.11666667 |
#| cadalso | 15650 | 2014-06-07 | 0.11666667 |
#... one for each row, but with the wrong values
而我想要的是:
#| cadalso | 15650 | 2014-06-07 | 0.11666667 |
#| cadalso | 15653 | 2014-06-07 | 0.2 |
#| mrjcleaver | 15941 | 2014-06-17 | 4.0 |
我做错了什么? 谢谢,M。
答案 0 :(得分:1)
非常感谢npostavs,答案是:
xmlstarlet sel -T -t -m /worklogs/worklog -v "concat('|',staff_id,' | ', worklog_id,' | ',work_date,' | ',hours,' |')" --nl jira-output.xml