如何使用awk修复此流媒体颜色比特币股票代码?

时间:2014-01-08 20:27:03

标签: linux bash awk bitcoin

我找到了以下命令,它在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

如何调整上述命令以忽略额外列中的信息?

原作者在以下视频中描述了该命令的结构

http://www.youtube.com/watch?v=HLnyDsr-4Ak

2 个答案:

答案 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)