我找到了以下命令,它在Linux控制台上使用awk实现了一个实时比特币代码。该命令使用来自irc频道#bitcoin-market irc.freenode.net的交易数据,并在比特币上涨或下跌时给出绿色,黑色或红色指示。
tail -f ~/.xchat2/scrollback/FreeNode/\#bitcoin-market.txt | awk '/mtgox.*USD/{if (last<$9) { c=32 } else if ( last>$9) { c=31 } else { c=30 }; if ($7>10) { b=";7"} else if ($7>2) { b=";4"} else { b="" }; ; printf "\033[1;" c "m%s mtgoxUSD %8s @ %-8s\033[0m\n", $5,$7,$9; last=$9 }'
不幸的是,自原始作者发布命令以来,IRC频道中的事务格式发生了变化。在某些交易行上有一个额外的列“x15 x11”
<amphipod> Jan08 20:18:23 bitstamp 1.9808 @ 816.94 USD
<amphipod> Jan08 20:17:55 mtgox x15 11.1083 @ 934.42352057 USD
<amphipod> Jan08 20:17:58 mtgox 0.1029 @ 560.00 GBP
<amphipod> Jan08 20:18:23 bitstamp 0.0010 @ 815.00 USD
<amphipod> Jan08 20:18:29 kraken 0.4942 @ 607.00 EUR
<amphipod> Jan08 20:18:02 mtgox x11 6.4768 @ 927.39960916 USD
如何调整上述命令以忽略额外列中的信息?
原作者在以下视频中描述了该命令的结构
答案 0 :(得分:1)
新列会导致第5列中的所有列向右移动。因此,您可以将$5
,$7
,...的所有值更改为$6
,$8
,依此类推:
awk '/mtgox.*USD/{if (last<$10) { c=32 } else if ( last>$10) { c=31 } else { c=30 }; if ($8>10) { b=";7"} else if ($8>2) { b=";4"} else { b="" }; ; printf "\033[1;" c "m%s mtgoxUSD %8s @ %-8s\033[0m\n", $6,$8,$10; last=$10 }'
awk
单行内容很好地扩展了:
/mtgox.*USD/ {
if (last < $10) { c = 32 }
else if (last > $10) { c = 31 }
else { c = 30 }
if ($8 > 10) { b = ";7" }
else if ($8 > 2) { b = ";4"}
else { b = "" }
printf "\033[1;" c "m%s mtgoxUSD %8s @ %-8s\033[0m\n", $6, $8, $10
last = $10
}
将其保存在ticker.awk
中,您可以通过以下方式调用它:
tail -f ~/.xchat2/scrollback/FreeNode/\#bitcoin-market.txt | awk -f ticker.awk
<强>更新强>
如果您希望脚本在没有x??
值的情况下也适用于其他行,则可以过滤输入。例如,如果第5列以“x”开头,则将其排除,然后使用原始脚本,如下所示:
tail -f ~/.xchat2/scrollback/FreeNode/\#bitcoin-market.txt | awk '$5 ~ /^x/ { $5="" }1' | awk '/mtgox.*USD/{...}'
答案 1 :(得分:1)
只需在您的脚本中将前4个字段作为数字1 -> 4
,将最后4个字段作为NF-3 -> NF
访问:
$ cat file
<amphipod> Jan08 20:18:23 bitstamp 1.9808 @ 816.94 USD
<amphipod> Jan08 20:17:55 mtgox x15 11.1083 @ 934.42352057 USD
<amphipod> Jan08 20:17:58 mtgox 0.1029 @ 560.00 GBP
<amphipod> Jan08 20:18:23 bitstamp 0.0010 @ 815.00 USD
<amphipod> Jan08 20:18:29 kraken 0.4942 @ 607.00 EUR
<amphipod> Jan08 20:18:02 mtgox x11 6.4768 @ 927.39960916 USD
$ awk '{print $1, $2, $3, $4, $(NF-3), $(NF-2), $(NF-1), $NF}' file
<amphipod> Jan08 20:18:23 bitstamp 1.9808 @ 816.94 USD
<amphipod> Jan08 20:17:55 mtgox 11.1083 @ 934.42352057 USD
<amphipod> Jan08 20:17:58 mtgox 0.1029 @ 560.00 GBP
<amphipod> Jan08 20:18:23 bitstamp 0.0010 @ 815.00 USD
<amphipod> Jan08 20:18:29 kraken 0.4942 @ 607.00 EUR
<amphipod> Jan08 20:18:02 mtgox 6.4768 @ 927.39960916 USD
例如,将原始脚本中的$7
更改为$(NF-1)
。