Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: skript vypreparovani bloku textu grep sed  (Přečteno 1742 krát)

Uran

  • Aktivní člen
  • *
  • Příspěvků: 341
skript vypreparovani bloku textu grep sed
« kdy: 21 Května 2009, 13:39:31 »
Tak jsem potreboval vypreparovat z textovych souboru konkretni ohraniceny blok textu.

Zdrojovy soubor:
Kód: [Vybrat]
.
.
.
.
[42]&nbsp;<a href="kniha/982">Netvoři z hlubin Wrecku</a><br />
[43]&nbsp;<a href="kniha/429">Čarodejnice z bažin 1</a><br />
[43]&nbsp;<a href="kniha/430">Čarodejnice z bažin 2</a><br />
[44]&nbsp;<a href="kniha/984">Beznadějné pátrání</a><br />
<p>Neřazené díly série</p><div class="dvouradek"><a href="kniha/1004">Adarhargský jed</a></div><div class="dvouradek"><a href="kniha/9549">Děti otroků</a></div><div class="dvouradek"><a href="kniha/1014">Dračí krev</a></div><div class="dvouradek"><a href="kniha/999">Charlungští bojoví obři</a></div><div class="dvouradek"><a href="kniha/1002">Jablka z Beltamoru</a></div><div class="dvouradek"><a href="kniha/1005">Kalužiny modré krve</a></div><div class="dvouradek"><a href="kniha/1012">Král posledního moře</a></div><div class="dvouradek"><a href="kniha/1015">Královský gambit</a></div><div class="dvouradek"><a href="kniha/10408">Krvavé arény</a></div><div class="dvouradek"><a href="kniha/1003">Meč proti sekeře</a></div><div class="dvouradek">Mise na Šámatu</div><div class="dvouradek"><a href="kniha/1010">Oheň v kapradí</a></div><div class="dvouradek"><a href="kniha/3995">První mise</a></div><div class="dvouradek"><a href="kniha/5460">Svatá válka</a></div><div class="dvouradek"><a href="kniha/1001">Šarlatové pláště</a></div><div class="dvouradek"><a href="kniha/1009">Ve stínu pravdy</a></div><div class="dvouradek"><a href="kniha/8345">Vládce hurikánů</a></div><div class="dvouradek"><a href="kniha/1013">Vnitřní záležitost</a></div><div class="dvouradek"><a href="kniha/6146">Zachraňte Titanic!</a></div><div class="dvouradek"><a href="kniha/1008">Zatykač na Stonea</a></div><div class="dvouradek"><a href="kniha/1011">Zkáza Tortugy</a></div><div class="dvouradek"><a href="kniha/5054">Zlato Alwogiry</a></div></div><div id="anotace">Informace / Anotace ke knize: <strong>Mise na Šámatu</strong>
<p>Generál Khov poslal Marka Stona na rutinní inspekci na planetu Šámat.
Takových inspekcí agenti SDPP vykonají za rok mnoho. Planeta je však velmi
nepohostinná. I přes mistrovské pilotní umění androida Raye jsou
sestřeleni. Opravit astronef je vzhledem k nedostatku náhradních dílů nad
síly i takového odborníka, jakým je Ray. Na Šámatu se některé dají
najít, ale…</p>

<p>Přežít a splnit úkol, v tom je Mark Stone mistr. Podaří se mu to i na
Šámatu?</p>

<!-- by Texy2! --></div><hr style="clear: left;" class="nevid" /></div> <!-- div.detail -->

</div> <!-- div.kniha_info -->


<hr style="clear: right;" class="nevid" />
<hr style="clear: left;" class="nevid" />


</div> <!-- div.content -->

<div id="footer">
<div id="paticka">
<div class="c">
  <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/" class="fl">
    <img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-sa/3.0/88x31.png" /></a>
    This <span xmlns:dc="http://purl.org/dc/elements/1.1/" href="http://purl.org/dc/dcmitype/InteractiveResource" rel="dc:type">dílo</span>
    is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/">Creative Commons Uveďte autora-Neužívejte dílo komerčně-Zachovejte licenci 3.0 Unported License</a>.
</div>
2005 - 2009 www.legie.info, <a href="http://www.3tecky.cz">Ladislav -Knedle- Ševcůj</a> - knedle[at]3tecky.cz |generováno 0.4105 sekund <a href="http://www.toplist.cz/zabava"><script type="text/javascript">
<!--
document.write ('<img src="http://toplist.cz/dot.asp?id=211177&amp;http='+escape(document.referrer)+'&amp;t='+escape(document.title)+'" width="1" height="1" border=0 alt="TOPlist" />');
//--></script></a><noscript><div><img src="http://toplist.cz/dot.asp?id=211177" style="border:none;"
alt="TOPlist" width="1" height="1" /></div></noscript>
<a href="http://whosread.com/cs/show/1576fh" title="online counter"><img src="http://whosread.com/counter/1576fh.gif" alt="online counter" width="80" height="15" class="noborder" /></a>

</div> <!-- div.paticka -->

</div> <!-- div.footer -->

</div> <!-- div.container -->

</body>
</html>


Vzasade se mi jedna o vypreparovani teto sekce:

Kód: [Vybrat]
<p>Neřazené díly série</p><div class="dvouradek"><a href="kniha/1004">Adarhargský jed</a></div><div class="dvouradek"><a href="kniha/9549">Děti otroků</a></div><div class="dvouradek"><a href="kniha/1014">Dračí krev</a></div><div class="dvouradek"><a href="kniha/999">Charlungští bojoví obři</a></div><div class="dvouradek"><a href="kniha/1002">Jablka z Beltamoru</a></div><div class="dvouradek"><a href="kniha/1005">Kalužiny modré krve</a></div><div class="dvouradek"><a href="kniha/1012">Král posledního moře</a></div><div class="dvouradek"><a href="kniha/1015">Královský gambit</a></div><div class="dvouradek"><a href="kniha/10408">Krvavé arény</a></div><div class="dvouradek"><a href="kniha/1003">Meč proti sekeře</a></div><div class="dvouradek">Mise na Šámatu</div><div class="dvouradek"><a href="kniha/1010">Oheň v kapradí</a></div><div class="dvouradek"><a href="kniha/3995">První mise</a></div><div class="dvouradek"><a href="kniha/5460">Svatá válka</a></div><div class="dvouradek"><a href="kniha/1001">Šarlatové pláště</a></div><div class="dvouradek"><a href="kniha/1009">Ve stínu pravdy</a></div><div class="dvouradek"><a href="kniha/8345">Vládce hurikánů</a></div><div class="dvouradek"><a href="kniha/1013">Vnitřní záležitost</a></div><div class="dvouradek"><a href="kniha/6146">Zachraňte Titanic!</a></div><div class="dvouradek"><a href="kniha/1008">Zatykač na Stonea</a></div><div class="dvouradek"><a href="kniha/1011">Zkáza Tortugy</a></div><div class="dvouradek"><a href="kniha/5054">Zlato Alwogiry</a></div></div><div id="anotace">Informace / Anotace ke knize: <strong>Mise na Šámatu</strong>
<p>Generál Khov poslal Marka Stona na rutinní inspekci na planetu Šámat.
Takových inspekcí agenti SDPP vykonají za rok mnoho. Planeta je však velmi
nepohostinná. I přes mistrovské pilotní umění androida Raye jsou
sestřeleni. Opravit astronef je vzhledem k nedostatku náhradních dílů nad
síly i takového odborníka, jakým je Ray. Na Šámatu se některé dají
najít, ale…</p>

<p>Přežít a splnit úkol, v tom je Mark Stone mistr. Podaří se mu to i na
Šámatu?</p>

<!-- by Texy2! --></div><hr style="clear: left;" class="nevid" /></div> <!-- div.detail -->

Splichtil jsem tento skript, ktery funguje - $soub je nazev html souboru:

Kód: [Vybrat]
a=`cat $soub | grep -n anotace | sed s#[^0-9][0-9]*##g | tail`
b=`cat $soub | wc -l`
d=$(($b-$a))
e=`$soub | tail --lines=$d`
f=`$soub | tail --lines=$d | grep -n 'Texy2' | sed s#[^0-9][0-9]*##g | tail`
cat $soub | tail --lines=$d | head --lines=$(($f-1))

Problem nastal v okamziku, kdyz jsem to chtel dat do cyklu (tech souboru je cca 14000):

Kód: [Vybrat]
find . -iname '*' -type f | while read soub
do
a=`cat $soub | grep -n anotace | sed s#[^0-9][0-9]*##g | tail`
b=`cat $soub | wc -l`
d=$(($b-$a))
e=`$soub | tail --lines=$d`
f=`$soub | tail --lines=$d | grep -n 'Texy2' | sed s#[^0-9][0-9]*##g | tail`
cat $soub | tail --lines=$d | head --lines=$(($f-1))
done

pak jiz to nefunguje:

Kód: [Vybrat]
ged@ged-laptop:~/data/prechodne/legie_data/anotace_test$ bash legie
legie: line 5: 233-: syntax error: operand expected (error token is "-")
"Pouze text v MS Wordu je opravdu čistý, příteli."

Yontalcar

  • Stálý člen
  • **
  • Příspěvků: 833
  • Semper fidelis
Re: skript vypreparovani bloku textu grep sed
« Odpověď #1 kdy: 21 Května 2009, 14:42:26 »
uff... co to má být
zkus místo té tvojí hrůzy použít radši tohle:
Kód: [Vybrat]
cat ${file} |sed -n '/anotace/,/Texy2/p'|head -n -2|tail -n +2
NB: ASUS X53U - AMD Brazos E450; Debian GNU/Linux Sid amd64 (KDE 4.14)
Jen dvě věci jsou nekonečné - vesmír a lidská hloupost. Tím prvním si ovšem nejsem tak jist. - Albert Einstein

Uran

  • Aktivní člen
  • *
  • Příspěvků: 341
Re: skript vypreparovani bloku textu grep sed
« Odpověď #2 kdy: 21 Května 2009, 14:51:30 »
jj dekuji moc zacinam se v bashi ztracet a pak vytvarim takoveto obludnosti. jinak se mi castecne podarilo mnou navrzeny "skript" zprovoznit, ale stejne mi to hazelo i spoustu chyb.

zjistli jsem, ze mezi temi cca 14000 soubory jsou nejak, ktere se strukturou mirne lisi a pak vznikaji problemy.
"Pouze text v MS Wordu je opravdu čistý, příteli."

Uran

  • Aktivní člen
  • *
  • Příspěvků: 341
Re: skript vypreparovani bloku textu grep sed
« Odpověď #3 kdy: 21 Května 2009, 15:04:29 »
Jeste maly dotaz skript jsem upravil a funguje:

Kód: [Vybrat]
find ./anotace_test -iname '*' -type f | while read file
do
echo --------------------zacatek--------------------
cat ${file} |sed -n '/anotace/,/Texy2/p'|head -n -2|tail -n +2
echo --------------------konec--------------------
done

Jelikoz vsak nektere soubory neobsahuji hledany blok textu ve vysledku se pak vyskytuji nasledujici sekvence, kterych bych se rad zbavil
Kód: [Vybrat]
--------------------zacatek--------------------
--------------------konec--------------------

zkousel jsem pridat radek:

Kód: [Vybrat]
sed s#--------------------zacatek--------------------$--------------------konec--------------------##gale bez uspechu.
"Pouze text v MS Wordu je opravdu čistý, příteli."

nettezzaumana

  • Host
Re: skript vypreparovani bloku textu grep sed
« Odpověď #4 kdy: 21 Května 2009, 15:19:00 »
zapisuj ty interni hlasky skriptu na stderr ;) aka `echo --------------------zacatek-------------------- 1>&2`

Yontalcar

  • Stálý člen
  • **
  • Příspěvků: 833
  • Semper fidelis
Re: skript vypreparovani bloku textu grep sed
« Odpověď #5 kdy: 21 Května 2009, 15:21:31 »
Kód: [Vybrat]
#!/bin/bash
find ./anotace_test -iname '*' -type f | while read file; do
    text="$(cat ${file} |sed -n '/anotace/,/Texy2/p'|head -n -2|tail -n +2)"
    if [ -n "${text}" ];then
        echo --------------------zacatek--------------------
        echo "${text}"
        echo --------------------konec--------------------
    fi
done

exit 0
NB: ASUS X53U - AMD Brazos E450; Debian GNU/Linux Sid amd64 (KDE 4.14)
Jen dvě věci jsou nekonečné - vesmír a lidská hloupost. Tím prvním si ovšem nejsem tak jist. - Albert Einstein

 

Provoz zaštiťuje spolek OpenAlt.