70 lines
1.2 KiB
Awk
70 lines
1.2 KiB
Awk
|
function sumItUp(units, cpu) {
|
||
|
# avoid floating point arithmetic AT ALL COST!
|
||
|
partsLen = split(cpu, parts, ".")
|
||
|
if (partsLen == 1) {
|
||
|
cost = parts[1] * 100
|
||
|
return cost * units
|
||
|
}
|
||
|
|
||
|
dec = parts[2]
|
||
|
dec = substr(dec, 0, 2)
|
||
|
for (i = length(dec); i < 2; i++) {
|
||
|
dec = dec"0"
|
||
|
}
|
||
|
|
||
|
cost = parts[1] * 100 + dec
|
||
|
return cost * units
|
||
|
}
|
||
|
BEGIN {
|
||
|
RS="\n"
|
||
|
FS=";"
|
||
|
|
||
|
split(ARG_TICKER, _tmp_tickers, ";")
|
||
|
for (i in _tmp_tickers) {
|
||
|
tickers[_tmp_tickers[i]] = ""
|
||
|
hasTickers = 1
|
||
|
}
|
||
|
|
||
|
gsub(/[-: ]/, "", ARG_DATE_AFTER);
|
||
|
gsub(/[-: ]/, "", ARG_DATE_BEFORE);
|
||
|
|
||
|
}
|
||
|
|
||
|
(hasTickers == 1) && ($2 in tickers == 0) { next }
|
||
|
|
||
|
{
|
||
|
fieldDate=$1
|
||
|
gsub(/[-: ]/, "", fieldDate);
|
||
|
|
||
|
if (ARG_DATE_AFTER != "" && ARG_DATE_AFTER > fieldDate) { next }
|
||
|
if (ARG_DATE_BEFORE != "" && ARG_DATE_BEFORE < fieldDate) { next }
|
||
|
}
|
||
|
|
||
|
{
|
||
|
if ($3 == "buy") {
|
||
|
profit[$2] += $6
|
||
|
} else if ($3 == "sell") {
|
||
|
profit[$2] -= $6
|
||
|
}
|
||
|
|
||
|
lastPrice[$2] = $4
|
||
|
}
|
||
|
|
||
|
END {
|
||
|
widestNum = 0
|
||
|
for (tic in profit) {
|
||
|
profit[tic] = sumItUp(profit[tic], lastPrice[tic])
|
||
|
|
||
|
profit[tic] /= 100
|
||
|
str = sprintf("%.2f", profit[tic])
|
||
|
strLen = length(str)
|
||
|
if (strLen > widestNum) {
|
||
|
widestNum = strLen
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
for (tic in profit) {
|
||
|
printf "%-9s : %"widestNum".2f\n", tic, profit[tic]
|
||
|
}
|
||
|
}
|