2016-09-08 17 views
2

私は以下のようなmpdを持っています。 MPDawkがパターンと一致する行を印刷する

<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"/> 

としてファイル名を指定して、私は

私の所望の出力は、私のように仕事をdoesntのは、次のコマンドを試してみました

<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"/> 

で異なるファイルに各<BaseURL>について<segment URLラインを保存したいです期待されるどんな助けもありがとう。以下のコマンドは、mpdファイル内の最後のセグメントURLのみを表示しています。私はawkがあなたが別のファイルに保存したいと言うが、あなたはsegment.01` `にすべてを保存しているセグメントの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 
+0

を印刷している理由について混乱しています。異なるファイルに書き込むコードはどこですか?また、 ' '行に' 0'と '1'文字の並びだけが一致していれば、' 'と一致しません。 – Barmar

+0

regexpは「([0-9] +)<\/BaseURL>」と一致する必要があります。 – Barmar

+0

'segf'ファイル名の正規表現にあるキャプチャグループの番号の使い方を尋ねていますか? http://stackoverflow.com/questions/10913598/how-to-get-sub-expression-value-of-regexp-in-awk – Barmar

答えて

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 
+0

新しい ''になるたびにファイルを閉じるので、 '>>'が必要です。最初にファイルを開いた後にファイルに書き込むとき、 '>'はファイルを空にします。 'close(segf)'を除外しただけでもうまくいくはずです。 – Barmar

+0

私は上記のスクリプトを実行しようとしているときに '読み込み(そのようなファイルやディレクトリはありません)e 'mpdとmpdファイルと同じディレクトリにありますが、スクリプトに必要な権限を与えていますchmod + x run.sh)しかし、私は以下のエラーを '参照してください(そのようなファイルやディレクトリはありません)e 'mpd – Raj

+0

あなたのコメントにはエラーメッセージが混乱しているようです。 – Barmar

関連する問題