linux - 如何使用 awk 修复这个流式彩色比特币自动收报机?

标签 linux bash awk bitcoin

我发现以下命令在 Linux 控制台上使用 awk 实现实时比特币代码。该命令使用来自 irc channel #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 channel 中的交易格式发生了变化。在一些交易行上有一个额外的列“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

最佳答案

新列会导致从第 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/{...}'

关于linux - 如何使用 awk 修复这个流式彩色比特币自动收报机?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21005791/

相关文章:

linux - 在 Amazon ec2 中设置 GoDaddy SSL

linux - 如果 fsck 命令运行不正常,结果是什么?

linux - 忽略以连字符开头的 bash 脚本命令行参数

bash - 如何在 Bash 中编写 'for' 循环?

linux命令从一行中获取信息

c - Linux内核模块复制进程的.text段

linux - Grep:列出 'per-file' 结果

bash - cron 脚本不会像它应该的那样重新启动

shell - 仅打印最后出现的重复行

linux - 仅删除文件中数字之间的多个空格