Mandriva Fórum

Programování => Shell, awk, sed ... => : Ged January 12, 2011, 14:58:48



: duplicitni bloky textu
: Ged January 12, 2011, 14:58:48
Hoj chtel jsem si stahnout texty z webu jednoho serialu. Jelikoz je prave ta cast dynamicky generovana zvolil jsem hrubou silu a pomici wget-u jsem postahoval cca 200 kopii. Sedem jsem pak vypreparoval bloky textu o ktere ma zajem.
Potreboval bych sak odstranit duplicitni bloky a stim si nevim rady.

Kdyby nekdo mel (jak, ze asi ma nejake) elegantnejsi reseni, budu rad. Jedna se o sekci "Hlášky" na adrese http://fringe.sff.cz/ (http://fringe.sff.cz/)

Soubor s daty prikladam.

Dekuji za pomoc.


: Re: duplicitni bloky textu
: _dworkin January 19, 2011, 23:55:47
Kdybych to resil v bashi tak nahradit prazdny radek za neco jedinecneho  (dve \n\n za ALfA) a pak zamenil  znak zalomeni (10) za neco dalsiho jedinecneho (BEtA), pak bych prvni jedinecny retezec zamenil zas za zalomeni a ziskal bych tak misto bloku radky. Pak bych na to strcil sort -u. A nakonec druhy zase na zalomeni.


: Re: duplicitni bloky textu
: _dworkin January 20, 2011, 00:36:21
Napsal jsem to hrozne. Tak jinak.
:
cat fringe | sed "s/^$/_ALPHA_/g" | sed "s/$/_BETA_/" | tr -d "\n" | sed "s/_ALPHA_/\n/g" | sort -u | sed "s/_BETA_/\n/g" > fringe2


: Re: duplicitni bloky textu
: _dworkin January 20, 2011, 13:55:28
Tak jeste jednou. Vypada to, ze to potrebuji potrenovat komunikaci s lidma.

Problem je, ze mame mnozinu odstavcu/bloku html, ktera obsahuje duplicitni polozky. Hlavni prekazka reseni je v tom, ze tyto prvky nejsou nedelitelne (atomicke), ale mame je ve forme nekolika nasledujicich radku. Takze hlavnim ukolem je spojit tyto radky tvorici jeden odstavec/blok do samostatnych radku a pritom si ulozit dodatecne informace, aby se dany blok zase mohl rozbit na jednotlive radky. Ve chvili co prevedeme problem na problem duplicitnich radku, muzeme ho resit pomoci programu sort s parametrem -u (unique), ktery radky seradi a zrusi nadbytecne. Pak uz jen staci rozbit radky obsahujici cely odstavec na jednotlive radky.