2014-01-08 42 views
2

我發現了以下命令,它在Linux控制檯上用awk實現了一個實時比特幣代碼。該命令使用來自irc頻道#比特幣市場irc.freenode.net的交易數據,並在比特幣上漲或下跌時給出綠色,黑色或紅色指示。如何使用awk修復這個流式彩色比特幣報價器?

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

回答

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 

UPDATE

如果您希望腳本也適用於其他行,而且沒有x??值,則可以過濾輸入。例如,如果第5列有「X」,它排除在外,然後用原來的劇本,像這樣開頭:

tail -f ~/.xchat2/scrollback/FreeNode/\#bitcoin-market.txt | awk '$5 ~ /^x/ { $5="" }1' | awk '/mtgox.*USD/{...}' 
+0

適用於添加額外柱的所有行。但是在一些代碼行中沒有額外的列。所以我需要區分x11 x15和沒有的行。 –

+0

@OliverG。使用'NF-#'而不是硬編碼字段號碼? –

+0

@OliverG。我用另一個選擇更新了我的帖子 – janos

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)例如。