Portál AbcLinuxu, 16. července 2025 20:36


Dotaz: trochu odvážnější awk

15.3.2011 00:45 miky
trochu odvážnější awk
Přečteno: 520×
Odpovědět | Admin
Ahoj, jde v awku hledat indexem řetězec i pozpátku a od zarážky??? ...

když mám text: "aaa bbb ccc bbb aaa"

Jak zapsat, že chci najít pozici první mezery, ale přitom začít hledat až od písmene "b" (takže mezeru za "aaa" ignorovat)? (řešení: pozice 8)

A jak můžu zapsat, že chci najít pozici prvního písmene "a" doleva od "c"? (řešení: pozice 3)

Ví někdo, jak na to??? Je mi jasné, že to asi bude trochu oříšek (obzvláště to druhé), pro mě je veliký. Moc by mi to pomohlo.
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

15.3.2011 09:57 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: trochu odvážnější awk
Odpovědět | | Sbalit | Link | Blokovat | Admin
Použijte index() nebo match() pro nalezení "zarážky", pak substr() pro vyříznutí části, kterou chcete prohledávat, a nakonec znovu index() nebo match() s druhým vzorkem.
15.3.2011 11:15 Buri
Rozbalit Rozbalit vše Re: trochu odvážnější awk
Odpovědět | | Sbalit | Link | Blokovat | Admin
ak awk pouziva regex , skuste pozriet lookbehind pripadne lookforward ako je popisane tu: http://www.regular-expressions.info/lookaround.html
15.3.2011 13:59 l4m4
Rozbalit Rozbalit vše Re: trochu odvážnější awk
awk samozřejmě používá regulární výrazy, ovšem používá posixové rozšířené regulární výrazy, které žádné assertions typu look-někam nemají.
15.3.2011 22:21 miky
Rozbalit Rozbalit vše Re: trochu odvážnější awk
Díky za reakce. Měl bych ještě jednu podobnou otázku - jak nahradím znaky jen v určité části textu ... například pokud chci editovat pouze obsah uvnitř závorek (například funkcí awku "sub") "(" a ")" a nikde jinde. A ještě jedna poslední - jak, třeba opět subem, nahradit výskyt určitého řetězce pouze od pátého sloupečku?
16.3.2011 04:16 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: trochu odvážnější awk
Aplikujte nahrazení na podřetězec a pak to zase složte dohromady.
16.3.2011 14:11 miky
Rozbalit Rozbalit vše Re: trochu odvážnější awk
Díky, funguje, ten druhý dotaz, vypsat vše pouze od pátého sloupečku nevíte, jak? Trochu naivně jsem si myslel, že bude fungovat konstrukce jako:

sub(a,b,$5-); (ale "5-" se mu vůbec nelíbí, zkoušel jsem i více kombinací zápisů)
16.3.2011 21:29 Lucinka.Sluníčko
Rozbalit Rozbalit vše Re: trochu odvážnější awk
hledala jsem taky něco k awku a subu a google ukázal tuhle stránku tak zkouším položit svůj první dotaz (nadpisek vlákna se mi hodí k problému) :-D

tohle umím: sub("a","nahrazovane pismenko je: &",$0);

Ten ampersand co se používá na vypsání nahrazovaného řetězce mi dělá problémy.Tam je v tom & uložená i jeden znak na konci toho řetězce,který ampersand zastupuje a chtěla bych ho odstranit, abych to ukázala líp: nahrazuji ahojX a když pak chci to vypsat tím ampersandem, ale bez X (jen ahoj),jak to mám udělat???

PS: a t s tím sloupečkem, jak psal klučina výš, by mi taky bodlo děkuji ;-)

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.