如何使用awk修复这个stream式颜色比特币报价器?

我发现下面的命令,在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)