Portál AbcLinuxu, 10. května 2025 03:06

Dotaz: OFS v awk

15.3.2007 15:57 macrek | skóre: 12
OFS v awk
Přečteno: 140×
Odpovědět | Admin
Preco mi nefunguje premenna OFS v awk ?
Zapis:

ls -l | awk 'BEGIN { OFS=";"} {print}'

Mi hodi rovnaky vystup ako bez awk. Skusal som to na 2 roznych systemoch.

Za nakopnutie diki.
An eye for an eye makes the whole world blind.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

15.3.2007 21:09 Marek Pasovsky | skóre: 32
Rozbalit Rozbalit vše Re: OFS v awk
Odpovědět | | Sbalit | Link | Blokovat | Admin
OFS - Output Filed Separator
jenze awk '{print}' tiskne cely radek ze vstupu najednou na vystup - takze tam neni kam uplatnit OFS
zkus:
ls -l | awk 'BEGIN {OFS=";"} {print $1,$2,$3}'

Marek
If you don't understand or are scared by any of the above ask your parents or an adult to help you.
15.3.2007 21:53 macrek | skóre: 12
Rozbalit Rozbalit vše Re: OFS v awk
Hmm.. jasne
ale funguje to aj takto:
ls -l | awk 'BEGIN {OFS=";"} {$1=$1;print}'
Staci nieco s jednym z fieldov spravit a uz sa uplatni OFS na cely vystup.
An eye for an eye makes the whole world blind.
16.3.2007 07:38 Aleš Kapica | skóre: 52 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: OFS v awk
Jestli to nebude tím, že nastavuješ OFS. Tedy oddělovač položek. V prvním případě sice proměnnou nastavíš ale výstupem je podle mne pouze opis vstupu.
16.3.2007 07:47 Aleš Kapica | skóre: 52 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: OFS v awk
Koukám že jsem se nevyjádřil dost zřetelně. OFS je výstupní oddělovač. A v původním příkladu je příkaze pro výstup pouze opis vstupu. Nezpracovává se žádná položka, tudíž není co oddělovat.
16.3.2007 09:10 macrek | skóre: 12
Rozbalit Rozbalit vše Re: OFS v awk
Ide o to, ze v tomto pripade je vystupom len opis vstupu:
ls -l | awk 'BEGIN { OFS=";"} {print}'
V tomto pripade je vystupom tiez len opis vstupu, ale riadok je uz "rebuildnuty" kvoli $1=$1:
ls -l | awk 'BEGIN { OFS=";"} { $1=$1; print}'

Alebo ako hovori GNU.org:

Finally, there are times when it is convenient to force awk to rebuild the entire record, using the current value of the fields and OFS. To do this, use the seemingly innocuous assignment:

$1 = $1 # force record to be reconstituted
print $0 # or whatever else with $0

An eye for an eye makes the whole world blind.
16.3.2007 11:12 Aleš Kapica | skóre: 52 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: OFS v awk
print není totéž co print $0. Ten středník se ti objeví teprve až dáš za to další položku. Takhle:
ls -l | awk 'BEGIN { OFS=";"} {print $0,""}'
Ještě jednou opakuji - OFS je oddělovač položek. Protože jinak máš pouze jednu položku a hned konec řádku, tak nemá co oddělovat. Vloží se ti teprve když přidáš další položku - byť prázdnou.

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.