2014-01-08 1 views
2

Я нашел следующую команду, которая реализует живой биткойн тикер с awk на консоли Linux. Команда использует данные транзакций с канала irC# bitcoin-market 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 изменился с тех пор, как автор опубликовал команду. На некоторых линиях Transaction есть дополнительный столбец «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??, вы можете отфильтровать входные данные. Например, если пятый столбец начинается с «х», исключить его, а затем использовать оригинальный сценарий, как этот:

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), например.