2016-09-08 3 views
2

나는 아래와 같은 mpd를 가지고 있습니다. MPD와 같은 파일 이름으로awk가 패턴과 일치하는 줄을 출력합니다.

<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 세그먼트의 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

당신은 당신이 다른 파일에 저장하고 싶은 말은의 마지막 항목을 인쇄하는 이유에 혼란 스러워요,하지만 당신은 segment.01''에 모든 것을 저장하고 있습니다. 다른 파일에 쓸 코드는 어디에 있습니까? 또한 ''행에 '0'과 '1'문자가있는 행만 일치하면 ''과 일치하지 않습니다. – Barmar

+0

정규 표현식은 숫자와 일치 시키려면 ' ([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

관련 문제