Portál AbcLinuxu, 14. května 2024 12:50


Dotaz: AWK getline a vrácení zpátky

25.3.2010 21:54 jack.mediv
AWK getline a vrácení zpátky
Přečteno: 289×
Odpovědět | Admin

Dobry den, nevim si rady s pouzitim AWK. Potřebuji při matchnutí regulárního výrazu začít prohledávat vstupní soubor dále po řádích a hledat odpovídající klíč a po nalezení se opět vrátit na původní pozici kdy jsem matchnul regulární výraz a od té pokračovat hledanim toho sameho regularniho vyrazu dále, napr:

11 aa
21 bb
11 1
21 0
33 cc
akw '/aa/
{ id=$1;
do {
getline tmp;
i=match(tmp," ");
if (index(id,substr(tmp,0,i-1)){
# neco udelej
break;
}
} while ..
}\ /bb/
{ id=$1;
do {
getline tmp;
i=match(tmp," ");
if (index(id,substr(tmp,0,i-1)){
# neco udelej
break;
}
} while .. }'

bohuze tato konstrukce radek 21 bb uz netestuje ale pokracuje 33 cc a ja bych potreboval testovat takhle kazdy radek zvlast. Cilem je otestovat hodnoty ktere odpovidaji stejnym id a podle toho provest nejakou akci. dekuji za pripadne navrhy

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

26.3.2010 11:15 l4m4
Rozbalit Rozbalit vše Re: AWK getline a vrácení zpátky
Odpovědět | | Sbalit | Link | Blokovat | Admin
a) načíst celý soubor do řetězce

b) nedělat to v awk

c) streamlinovat algoritmus, tj. při nalezení si pouze zapamatovat, jaký klíč (resp. klíče) hledáš, a testovat jeho přítomnost normálně v {} bloku, který se vykonává na každém řádku
22.2.2011 14:30 pletiplot | skóre: 14
Rozbalit Rozbalit vše Re: AWK getline a vrácení zpátky
Ještě 4. možnost a to otevřít si soubor dvakrát, jednou jako parametr awk nebo stdin a jednou jako getline<soubor. Přes stdin vyhledávat klíče, přes getline opakovaně otvírat a scanovat. Ale dávám přednost cashovat klíče v poli přímo v AWK a nad každým řádkem testovat, zda klíč není již v poli. Tím to (jak řekl kolega) streamizuješ (všechnu práci uděláš na jeden průběh) a tím získáš spoustu dalších výhod.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.