我有一个类似下面的mpd文件,文件名为mpd
<BaseURL>01/</BaseURL>
<SegmentList timescale="1000">
<SegmentURL media="1.ts" mediaRange="0-6003779"/>
<SegmentURL media="2.ts" mediaRange="0-7313387"/>
<BaseURL>02/</BaseURL>
<SegmentList timescale="1000">
<SegmentURL media="1.ts" mediaRange="0-6003779"/>
<SegmentURL media="2.ts" mediaRange="0-7313387"/>
<BaseURL>01/</BaseURL>
<SegmentList timescale="1000">
<SegmentURL media="3.ts" mediaRange="0-6003779"/>
<SegmentURL media="4.ts" mediaRange="0-7313387"/>
<BaseURL>02/</BaseURL>
<SegmentList timescale="1000">
<SegmentList timescale="1000">
<SegmentURL media="3.ts" mediaRange="0-6003779"/>
<SegmentURL media="4.ts" mediaRange="0-7313387"/>
我想要将每个<BaseURL>
的<segment URL>
行保存到不同的文件中。
我的期望输出是
<BaseURL>01/</BaseURL>
<SegmentURL media="1.ts" mediaRange="0-6003779"/>
<SegmentURL media="2.ts" mediaRange="0-7313387"/>
<SegmentURL media="3.ts" mediaRange="0-6003779"/>
<SegmentURL media="4.ts" mediaRange="0-7313387"/>
我尝试了以下命令,但效果与预期不符,希望得到帮助。下面的命令只会打印mpd文件中最后一个片段URL。我对awk为什么只打印最后几个条目感到困惑。
awk '
# start writing to new segment file segment.01 etc
match($0, /<BaseURL>([0-9]+)\/<\/BaseURL>/, m) {
base=m[1]
close(segf)
segf="segment." base
print "write segments to " segf
print >segf
}
/<SegmentURL / {print >segf}
END {close(segf)}
' mpd
<BaseURL>
行,而无法匹配<BaseURL>02</BaseURL>
。 - Barmar<BaseURL>([0-9]+)<\/BaseURL>
以匹配任何数字。 - Barmar开始写入新的片段文件segment.01等
match($0, /<BaseURL>([0-9]+)/</BaseURL>/, m) { base=m[1] close(segf) segf="segment." base print "将片段写入 " segf print >segf } /<SegmentURL / {print >segf} END {close(segf)} ' mpd - Raj