我有一个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"/>

我想将每个<segment URL<BaseURL>行保存到不同的文件中
我想要的结果是
<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只打印段url的最后一个条目
  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

最佳答案

  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

关于bash - awk打印与模式匹配的行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39400094/

10-15 01:16
查看更多