我的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
的{{1}}行保存到不同的文件中
我想要的输出是
<BaseURL>
我已经尝试了以下命令,它没有按预期工作任何帮助将不胜感激。下面的命令只打印mpd文件中的最后一个段URL。我很困惑为什么awk只打印段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"/>
答案 0 :(得分:0)
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
答案 1 :(得分:0)
这是我的答案
cat dfg | awk'function writeFile(a){print $ 0 >>“ File_” a; } BEGIN {FS =“ [<,>,=]”; a = 0;} {if($ 2 ==“ BaseURL”){a ++; writeFile(a)} else if($ 2 ==“ SegmentURL media”){ writeFile(a)}}'
说明:-使用多个文件分隔符可以准确地进行比较并提取所需的行,并在每次获取BaseURL时保留一个计数器。递增计数器并将其传递给awk中的用户定义功能(每次遇到BaseURL都会随着计数器的更改而打开用于写入的新文件) 我们为编写基于文件的输出所做的
输出:-
文件1_4 文件1_3 文件1_2 File1_1