Bevezető nullák eliminálása awk-ban

Mivel az awk stringként tárolja a változókat, kézenfekvő, hogy végezzünk aritmetikai műveletet, melynek eredményében már nem lesz bevezető nulla. Persze, a változónk értéke ne változzék:

variable+=0;

Szebb megoldás:

variable=int(variable);

Konkrét példa:

awk 'BEGIN {a="06"; print a; a+=0; print a;}'
06
6

Épp szükségem volt erre, aztán majdnem elbonyolítottam, amikor eszembe jutott, hogy ki kellene próbálni így. S valóban működik. :)

Update

Elegánsabb, szebb megoldás legradi asztaltárstól:

awk 'BEGIN {a="06"; print a; a=int(a); print a;}'
06
6

Hozzászólások

Szerintem a gsub(/^0*/,"",a) nem bonyolult, es nem csak szamok eseten mukodik.

A gsub-bal két probléma is van:

- az egyik, hogy *valószínűleg* a regexp-es mintaillesztés lassabb, mint a szöveg-szám konverzió - de ez csak feltételezés

- a másik, hogy overkill, hiszen a sub bőven elegendő lenne, mivel a ^ miatt úgy sem lesz többszöri előfordulás (én amúgy ^0+ -t használnék, hogy ne hajtson végre helyettesítést az üres sztringre)

Az integerré konverzió jó ötlet. Ruby-t nem szereted?

"00602".to_i

Tegyük fel fordítva is a kérdést. Mi van ha kellenek vezető nullák? Azt hogy oldod meg? Ruby verzió:

"%05d" % 602
=> "00602"
"%05d" % "602"
=> "00602"
"%05d" % 60211
=> "60211"
"%05d" % 602115
=> "602115"

Elé konkatenálok egy "0"-t, vagy sprintf(). :)

Ruby-t nem használok. Igazából bash-ben vagy awk-ban oldom meg a hirtelen felmerülő gondjaimat. Awk-t szeretem, C-like szintaxisa van - nagyjából -, kényelmes. Kevés, de hatékony függvényei vannak, és viszonylag gyors. Jó, tudom, bash-hez képest minden gyors. :)

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Sima szovegfeldolgozasra a Ruby overkill. Tudod, milyen nagy Ruby-fan vagyok, de az ilyen feladatokra en is AWK-t hasznalok inkabb. Csak azt intezem Rubyban, amire az AWK keves, vagy nem kifejezetten szovegfeldolgozasi feladat (a Twitter kliens csak egy vadhajtas volt :-) ).
--
Blog | @hron84
Üzemeltető macik

Jelen esetben az

int()

beépített függvény nem vezetne az elvárt eredményre?

Az

a = int(a)

értékedás nem ,,csapja le'' a bevezető nullákat?

============================================
"Share what you know. Learn what you don't."