Sooo
Eu estou tentando registrar meu hashrate ethminer, no entanto estou tendo alguns problemas para encadear a saída de um egrep / grep em outro, eu até tentei com comandos diferentes (sed / cat ...) nenhum parece realmente ter qualquer tipo de saída, eu não posso nem redirecionar stdout para um arquivo!
A parte estranha; quando eu não tento encadear ou redirecionar nada, ele imprime o que é suposto no terminal!
após cerca de 2h de pesquisa, eu ainda estou com o mesmo erro (provavelmente o meu, mas não consigo entender) e mesmo depois de copiar algumas coisas que encontrei, ainda estou no mesmo lugar. .
aqui está o comando que gostaria de filtrar:
/home/USER/ethminer -U -S eu1.ethermine.org:4444 -O 0x*****************.********** --cuda-parallel-hash 4
imprima isso (ele gera cerca de um pouco mais de uma linha / segundo, e isso precisa ser executado basicamente para sempre):
ℹ 23:36:26|CUDA0 set work; seed: #4be89018, target: #0000000112e0
ℹ 23:36:26|CUDA0 set work; seed: #4be89018, target: #0000000112e0
m 23:36:28|ethminer Speed 20.01 Mh/s gpu/0 20.01 [A0+0:R0+0:F0] Time: 00:00
m 23:36:30|ethminer Speed 22.13 Mh/s gpu/0 22.13 [A0+0:R0+0:F0] Time: 00:00
A coisa que me interessa é a parte depois de Speed, apesar de haver personagens escondidos, aqui está o que um acorrentado
cat -e
exibe:
^[[32m m ^[[35m23:38:10^[[0m^[[30m|^[[34methminer^[[0m Speed ^[[1;36m 23.09^[[0m Mh/s gpu/0 ^[[36m23.09^[[0m [A0+0:R0+0:F0] Time: 00:00^[[0m$
observe a "Velocidade ^ [[1; 36m 23.09", estou usando o 'm' como referência para encontrar o hashrate na expressão com m [[:digit:]]+\.[[:digit:]]{2}
(btw você verá que eu preciso redirecionar o stderr para o stdout, isso é porque ethminer parece saída do hashrate no canal stderr ... meio estranho ...)
Isso me dá:
/home/USER/ethminer -U -S eu1.ethermine.org:4444 -O 0x*****************.********** --cuda-parallel-hash 4 2>&1 | cat -e | egrep -o --color=never "m [[:digit:]]+\.[[:digit:]]{2}" | egrep -o [[:digit:]]+\.[[:digit:]]{2}$
isso me mostra o que é suposto fazer:
m 0.00
m 15.74
m 19.41
Então, até agora, está tudo bem ... mas depois dessa ... tudo está ficando estranho ... Eu não consegui obter nenhuma saída ... nem mesmo no meu terminal a partir de qualquer comando encadeado, Eu tentei muitas coisas, de jogar com o redirecionamento de stderr e stdout sobre todos os lugares, tentei cat: sem saída, jogou um pouco com sed: sem sorte, com grep: não mais chance do que com sed ...
Idealmente eu gostaria de algo assim:
/home/USER/ethminer -U -S eu1.ethermine.org:4444 -O 0x*****************.********** --cuda-parallel-hash 4 2>&1 | cat -e | egrep -o --color=never "m [[:digit:]]+\.[[:digit:]]{2}" | egrep -o [[:digit:]]+\.[[:digit:]]{2}$ >> /home/USER/mining.log
Qual seria a saída:
22.26
22.47
no arquivo mining.log ...
Ajuda!
EDITAR:
O ethminer está vindo daqui: link
esta é a versão 0.12.0
UDATE:
A resposta do egmont acabou funcionando,
se eu entendi corretamente, isso é por causa da maneira como os dados enviados através de pipes são armazenados em buffer com o ethminer ... aqui está o comando que acabei usando:
stdbuf -oL ethminer [arguments] 2>&1 | stdbuf -oL cat -e | stdbuf -oL egrep -o "m [0-9]+\.[0-9]{2}" | stdbuf -oL egrep -o "[0-9]+\.[0-9]{2}" >> mining.log