2013-05-13 3 views
0

약간의 문제가있어서 어디서부터 시작해야할지 모르겠습니다. 다음 정보가 포함 된 텍스트 파일이 있습니다.텍스트를 개별 파일로 서식 지정하기

MINI COOPER 2007, 30,000 miles, British Racing Green, full service history, metallic paint, alloys. Great condition. £5,995 ono Telephone xxxxx xxxxx 

나는 출력은해야 다음과 같은 형식

<advert> 
    <manufacturer></manufacturer> 
    <make></make> 
    <model></make> 
    <price></price> 
    <miles></miles> 
    <image></image> 
    <desc><![CDATA[desc> 
    <expiry></expiry> // Any point in the future 
    <url></url> // Optional 
</advert> 
<advert> 

에서 위의 정보를 채울 필요가있다.

</advert> 
<advert> 
    <manufacturer>MINI</manufacturer> 
    <make></make> 
    <model></make> 
    <price>5,995</price> 
    <miles>30000</miles> 
    <image></image> 
    <desc><![CDATA[2007, British Racing Green, full service history, metallic paint, alloys. Great condition.Telephone xxxxxx xxxxxx]]></desc> 
    <expiry>Todays date 13/05/2013</expiry> 
    <url></url> 
</advert> 

는 어떤 도움을 주시면 감사 만들 것입니다.

+0

앞에'python' 스크립트, 또는'gawk' 스크립트,'도움이 될 수. 너 무슨 짓을 한거야? 당신은 시도한 코드를 보여주지 않으면 도움을 얻지 못할 것입니다 ... –

+0

나는 올바른 방향으로 나를 가리켜 줄 사람을 만났습니다. –

+0

나는 어떤 방향을 가리켰습니다 ....하지만 당신은 그들을 따라갈만큼 배워야합니다. –

답변

1

쉼표가 필드의 일부이기 때문에 쉼표 나 다른 것을 필드 구분 기호로 사용할 수없는 경우가 있으므로 GNU awk (gensub() 및 strftime())에서 이와 같은 것이 필요합니다. :

gawk '{ 
    print "<advert>" 
    printf "\t<manufacturer>%s</manufacturer>\n", $1 
    printf "\t<make></make>\n" 
    printf "\t<model></model>\n" 
    printf "\t<price>%s</price>\n", gensub(/.*£([[:digit:],]+).*/,"\\1","") 
    printf "\t<miles>%s</miles>\n", gensub(/.*[[:space:]]([[:digit:],]+)[[:space:]]+miles.*/,"\\1","") 
    printf "\t<image></image>\n" 
    printf "\t<desc><![CDATA[%s]]></desc>\n", gensub(/.*[[:space:]]+miles[[:space:]]*,[[:space:]]*(.*)/,"\\1","") 
    printf "\t<expiry>Todays date %s</expiry>\n", strftime("%d/%m/%Y") 
    printf "\t<url></url>\n" 
    print "</advert>" 
}' file 

내 편집기 영국 파운드 기호에 질식 할 것 같다, 그래서 여기에 대신 # 기호를 사용하여 실행 위의 스크립트는 다음과 같습니다

$ cat file 
MINI COOPER 2007, 30,000 miles, British Racing Green, full service history, metallic paint, alloys. Great condition. #5,995 ono Telephone xxxxx xxxxx 

$ gawk '{ 
    print "<advert>" 
    printf "\t<manufacturer>%s</manufacturer>\n", $1 
    printf "\t<make></make>\n" 
    printf "\t<model></model>\n" 
    printf "\t<price>%s</price>\n", gensub(/.*#([[:digit:],]+).*/,"\\1","") 
    printf "\t<miles>%s</miles>\n", gensub(/.*[[:space:]]([[:digit:],]+)[[:space:]]+miles.*/,"\\1"," 
") 
    printf "\t<image></image>\n" 
    printf "\t<desc><![CDATA[%s]]></desc>\n", gensub(/.*[[:space:]]+miles[[:space:]]*,[[:space:]]*(. 
*)/,"\\1","") 
    printf "\t<expiry>Todays date %s</expiry>\n", strftime("%d/%m/%Y") 
    printf "\t<url></url>\n" 
    print "</advert>" 
}' file 
<advert> 
     <manufacturer>MINI</manufacturer> 
     <make></make> 
     <model></model> 
     <price>5,995</price> 
     <miles>30,000</miles> 
     <image></image> 
     <desc><![CDATA[British Racing Green, full service history, metallic paint, alloys. Great con 
dition. #5,995 ono Telephone xxxxx xxxxx]]></desc> 
     <expiry>Todays date 13/05/2013</expiry> 
     <url></url> 
</advert> 
0

다음은 적어도 가야 할 몇 가지 예제 코드입니다. script.awk

awk -f script.awk file.txt 

내용 :

{ 
    for (i=1;i<=NF;i++) { 

     if ($i == "miles,") { 
      miles = $(i - 1) 

      $i = $(i - 1) = "" 
     } 

     if ($i ~ /£/) { 
      price = substr($i, 2) 

      $i = $(i + 1) = "" 
     } 
    } 

    gsub(/ +/, " "); 

    print "<advert>" 
    print "\t<manufacturer>" $1 "</manufacturer>" 
    print "\t<make></make>" 
    print "\t<model></make>" 
    print "\t<price>" price "</price>" 
    print "\t<miles>" miles "</miles>" 
    print "\t<image></image>" 
    print "\t<desc><![CDATA[" $0 "]></desc>" 
    print "\t<expiry>" strftime("%d/%m/%Y") "</expiry>" 
    print "\t<url></url>" 
    print "</advert>" 
} 

결과 :처럼 실행`-F를 사용

<advert> 
    <manufacturer>MINI</manufacturer> 
    <make></make> 
    <model></make> 
    <price>5,995</price> 
    <miles>30,000</miles> 
    <image></image> 
    <desc><![CDATA[MINI COOPER 2007, British Racing Green, full service history, metallic paint, alloys. Great condition. Telephone xxxxx xxxx]></desc> 
    <expiry>13/05/2013</expiry> 
    <url></url> 
</advert> 
+0

많은 분들께 감사드립니다. 적어도 나는 시작할 곳이있다. –

+0

스티브. 귀하의 게시물에 대해 많은 감사드립니다. –

관련 문제