Commit | Line | Data |
---|---|---|
03c229bf SK |
1 | function util_strip(s) { |
2 | sub("^ *", "", s) | |
3 | sub(" *$", "", s) | |
4 | return s | |
5 | } | |
6 | ||
7 | function util_round(n) { | |
8 | return int(n + 0.5) | |
9 | } | |
10 | ||
11 | function util_ensure_numeric(n) { | |
12 | return n + 0 | |
13 | } | |
14 | ||
15 | #------------------------------------ | |
16 | # Why do we need util_ensure_numeric? | |
17 | #------------------------------------ | |
18 | # awk appears to be guessing the type of an inputted scalar based on usage, so | |
19 | # if we read-in a number, but did not use it in any numeric operations, but did | |
20 | # use as a string (even in just a format string!) - it will be treated as a | |
21 | # string and can lead to REALLY SURPRISING behavior in conditional statements, | |
22 | # where smaller number may compare as greater than the bigger ones, such as. | |
23 | # | |
24 | # Demo: | |
25 | # | |
26 | # $ awk 'BEGIN {x = "75"; y = "100"; sprintf("x: %d, y: %d\n", x, y); if (x > y) {print "75 > 100"} else if (x < y) {print "75 < 100"}}' | |
27 | # 75 < 100 | |
28 | # $ awk 'BEGIN {x = "75"; y = "100"; sprintf("x: %s, y: %d\n", x, y); if (x > y) {print "75 > 100"} else if (x < y) {print "75 < 100"}}' | |
29 | # 75 > 100 | |
30 | ||
31 | # However, once used as a number, seems to stay that way even after being | |
32 | # used as string: | |
33 | # | |
34 | # $ awk 'BEGIN {x = "75"; y = "100"; x + y; sprintf("x: %s, y: %d\n", x, y); if (x > y) {print "75 > 100"} else if (x < y) {print "75 < 100"}}' | |
35 | # 75 < 100 | |
36 | # | |
37 | # $ awk 'BEGIN {x = "75"; y = "100"; x + y; sprintf("x: %s, y: %d\n", x, y); z = x y; if (x > y) {print "75 > 100"} else if (x < y) {print "75 < 100"}}' | |
38 | # 75 < 100 | |
39 | # | |
40 | # $ awk 'BEGIN {x = "75"; y = "100"; x + y; z = x y; if (x > y) {print "75 > 100"} else if (x < y) {print "75 < 100"}}' | |
41 | # 75 < 100 | |
42 | # $ awk 'BEGIN {x = "75"; y = "100"; z = x y; if (x > y) {print "75 > 100"} else if (x < y) {print "75 < 100"}}' | |
43 | # 75 > 100 |