1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
#!/bin/sh
# @fx - exchange rates between USD, EUR, PLN and THB (no arguments)
#
# One keyless request to open.er-api.com (base USD); the six cross-rates
# are derived from it. JSON is parsed with awk so no 'jq' is needed.
json=$(curl -fsS --max-time 8 "https://open.er-api.com/v6/latest/USD" \
| tr -d '\n\r') || { echo "fx: rate lookup failed"; exit 1; }
case "$json" in
*'"result":"success"'*) ;;
*) echo "fx: rate service returned an error"; exit 1 ;;
esac
printf '%s' "$json" | awk '
function rate(cur, s) {
if (match($0, "\"" cur "\":[0-9.]+")) {
s = substr($0, RSTART, RLENGTH)
sub(/^.*:/, "", s)
return s + 0
}
return -1
}
{
e = rate("EUR"); p = rate("PLN"); t = rate("THB")
if (e <= 0 || p <= 0 || t <= 0) {
print "fx: incomplete rate data"
exit 1
}
if (match($0, /"time_last_update_utc":"[^"]*"/)) {
d = substr($0, RSTART, RLENGTH)
sub(/^.*:"/, "", d)
sub(/"$/, "", d)
split(d, w, " ")
print "FX rates " w[1] " " w[2] " " w[3] " " w[4]
}
printf "1 USD = %.4g EUR\n", e
printf "1 USD = %.4g PLN\n", p
printf "1 USD = %.4g THB\n", t
printf "1 EUR = %.4g PLN\n", p / e
printf "1 EUR = %.4g THB\n", t / e
printf "1 PLN = %.4g THB\n", t / p
}
'
|