Mandriva Fórum

Programování => Shell, awk, sed ... => : Ged March 08, 2011, 14:29:00



: bloky textu filtrovani dle klicove fraze
: Ged March 08, 2011, 14:29:00
Resim jak prohledavat obsah doc souboru (firemni "databaze" receptur).

Soubory maji pevnou strukturu. Tj.

Hlavicka ......

vlastni receptura
.
.
.
.
Paticka .......

Pomoci
:
#!/bin/bash
find -type f -iname '*.doc' | while read F
do
catdoc "$F" | sed -n '/Hlavicka/,/Paticka/p'
done

jsem schopny ze souboru vypreparovat bloky textu. Dale bych z techto bloku potreboval vypsat pouze ty co obsahuji klicovou frazi/hledany retezec.
Jde na to pouzit sed?

Potrebuji cele bloky textu a ne jen radek s hledanym retezcem.

Dekuji.


: Re: bloky textu filtrovani dle klicove fraze
: _dworkin March 25, 2011, 16:00:23
Reseni mas prece uvedeno v tvem vlaknu "duplicitni bloky textu" .


: Re: bloky textu filtrovani dle klicove fraze
: Ged March 27, 2011, 14:01:53
Reseni mas prece uvedeno v tvem vlaknu "duplicitni bloky textu" .

No domnivam se, ze tam resim trochu neco jineho a to vypsat unikatni bloky textu a ne zlikvydovat ty duplicitni.

V tomhle pripade resim situaci, kdy potrebuji vypsat bloky textu ohraniceneho nemenou hlavickou a patickou a ktere navic obsahuji urcite klicove slovo.

Jde nejak do konstrukce "sed -n '/Hlavicka/,/Paticka/p'" zabudovat jeste podminku libovolneho poctu radku mezi hlavickou a hledanym retezcem; libovolny pocet radku mezi "hledanym retezcem" a patickou? Nejaky regex, ale aby nebyl moc zravy (jen opravdu ty vyskyty mezi "Halvickou" a prvni nasledujici "Patickou").

Aka - bloky, ktere potrebuji vypsat:

Hlavicka
fsdfsf
dfsdf
.
.
"hledany retezec"
.
.
sdfsfsf
Paticka


: Re: bloky textu filtrovani dle klicove fraze
: _dworkin April 01, 2011, 09:17:47
Vypsat radky obsahujici klicove slovo dela myslim grep. Prevest bloky na radky je ten uz reseny OBECNY problem bez ohledu co si s tim chtel predtim delat a ted delat nechces.


: Re: bloky textu filtrovani dle klicove fraze
: _dworkin April 02, 2011, 17:22:29
Awk reseni: oddelovac radku se pred zahajenim zameni na Hlavicka a oddelovac sloupcu za Paticka. U takto vytvorenych "radku" vyhovujici podmince mezi // se provede cast mezi slozenyma zavorkama {}. Tzn vypise dodatecne znovu Hlavicka pak prvni polozka radku (tzn. vse mezi Hlavicka a Paticka) a pridame zase ztracenou Paticku.

cat ??? | awk 'BEGIN { RS = "Hlavicka"; FS = "Paticka" } /hledany retezec/ { print "Hlavicka" $1 "Paticka" }'