Portál AbcLinuxu, 6. května 2025 06:19

Dotaz: gawk - OFS někdy nefunguje

18.4.2018 15:24 Tom
gawk - OFS někdy nefunguje
Přečteno: 430×
Odpovědět | Admin
Ahoj, mám problém s awk. Asi přesně nechápu, jak awk funguje.
printf "%b" "takhle:to:funguje:jak:chci\ntakhle:už:mi:nefunguje" | gawk  -F":" '{sub(/to/,"TO",$2);OFS=" ";print $0}'
Prosím vysvětlete.

Řešení dotazu:


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

Odpovědi

18.4.2018 19:55 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: gawk - OFS někdy nefunguje
Odpovědět | | Sbalit | Link | Blokovat | Admin
Náhrada OFS funguje jen na modifikované řádky.
printf "%b" "takhle:to:funguje:jak:chci\ntakhle:už:mi:nefunguje" |
    gawk  -F":" '{sub(/to/, "TO", $2); OFS=" "; $1=$1; print $0}'
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
19.4.2018 15:10 Tom
Rozbalit Rozbalit vše Re: gawk - OFS někdy nefunguje
Přidám tedy všude tuhle obezličku, díky! A nevíte náhodou, proč to funguje právě a jen při nějaké té změně prvku. Samozřejmě si to můžu zapamatovat jako vlastnost, ale smysl mi to moc nedává.
19.4.2018 15:40 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: gawk - OFS někdy nefunguje
Rozborka a sborka každého řádku zabere nějaký čas. Tvůrci AWK zřejmě obětovali tuto nepřesnost ve prospěch rychlosti, která bývá zpravidla mnohem žádanější než uvedený případ. Obejít se to dá.

AWK musíme brát jako jednoduchý a výkonný nástroj pro zpracování obrovských dat, například logů. Co na tom, že neumí kloudně zpracovat ani CSV? Chceme rychlost nejen vývoje aplikace, ale i zpracování dat.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
19.4.2018 20:30 standa
Rozbalit Rozbalit vše Re: gawk - OFS někdy nefunguje
Rozborka se musi udelat vzdycky, aby bylo mozne pouzivat $1-N. Jen ta sborka je zbytecna, pokud se do toho nehrabne. V tom pripade staci vyflusnout zas jen ten buffer.
19.4.2018 21:19 Odin
Rozbalit Rozbalit vše Re: gawk - OFS někdy nefunguje
Neni to nepresnost, je to zdokumentovane chovani troubo. Pokud neumis parsovat v awk ani obycejne csv, tak ho nepouzivej a patlej sve skripty treba v php. Csv v awk je na par radek.
19.4.2018 21:59 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: gawk - OFS někdy nefunguje
To bych chtěl vidět, jak si AWK poradí s tím, když bude jeden záznam se stringem v UTF-8, na více řádcích a s escapovanými uvozovkami, troubo.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
19.4.2018 22:09 Odin
Rozbalit Rozbalit vše Re: gawk - OFS někdy nefunguje
Tak ok, ja ti to napisu troubo. Cim chces oddelit jednotlive zaznamy? \r\n? \n? Cim chces oddelit jednotliva pole? Carka strednik? Muze byt pole v uzovkach a nasledne obsahovat viceradkovou hodnotu a \"? Kdyztak mi zadefinuj vlastni format troubo.
19.4.2018 22:12 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: gawk - OFS někdy nefunguje
To si raději vygooglím, troubo.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
20.4.2018 14:04 Tom
Rozbalit Rozbalit vše Re: gawk - OFS někdy nefunguje
Já jsem si to zkusil a dopadlo to takhle:
for i in `seq 1 100`; do printf '\\\"\xd0\n\xb5\\\"\n,'; done | tr -d "\n" | awk -F"," '{OFS=";"; $1="nic";printf $0}'
Možná jste to ale myslel jinak.
19.4.2018 18:20 .
Rozbalit Rozbalit vše Re: gawk - OFS někdy nefunguje
Protože jen při změně prvku je potřeba přepočítat $0 a provede se to s aktuálním OFS.
19.4.2018 20:23 karlik
Rozbalit Rozbalit vše Re: gawk - OFS někdy nefunguje
Jen bych doplnil, že pro rychlejší zpracování dat se mi osvědčil mawk. Rychlost zpracování byla zkrácena z cca deseti sekund na dvě, což už je snesitelné u interaktivního zadávání výběru dat pro (m)awk -> zobrazení grafu.

A taky jsem si "naběhl" při zpracování číslic s českou desetinnou čárkou (--use-lc-numeric). :-)
19.4.2018 20:37 standa
Rozbalit Rozbalit vše Re: gawk - OFS někdy nefunguje
A nebyl tak velky rozdil v case zpusoben tim, ze awk bezel v multibyte modu.

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.