我发现下面的命令,在Linux控制台上用awk实现了一个比特币实时转换器。 该命令使用来自irc通道#比特币市场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
我如何调整上面的命令忽略额外列中的信息?
原作者在下面的video中描述了命令的结构
新列将导致从第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
UPDATE
如果你希望脚本也可以用于其他行,而没有x??
值,你可以过滤输入。 例如,如果第五列以“x”开始,请将其排除,然后使用原始脚本,如下所示:
tail -f ~/.xchat2/scrollback/FreeNode/\#bitcoin-market.txt | awk '$5 ~ /^x/ { $5="" }1' | awk '/mtgox.*USD/{...}'
只需在你的脚本中NF-3 -> NF
四个字段的数字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
更改$7
$(NF-1)
。