Eu tenho esse uso simples do comando cut
e grep
:
cut -d: -f 2 mycut.txt | grep -Eo "[[:digit:]]{3}\.[[:digit:]]{3}"
Eu tenho linhas no meu arquivo de log como " ...- Velocidade total: 118,604 Mh / s, Total de compartilhamentos: 5 .... "
Como posso obter os últimos 3 valores numéricos "Velocidade total"?
Eu tentei o seguinte comando: grep 'Total Speed: ' screenlog.0 | sed 's/^.*: //'
sem sucesso.
a saída deve se parecer com:
118,604
118,604
118,604
Eu tenho esse uso simples do comando cut
e grep
:
cut -d: -f 2 mycut.txt | grep -Eo "[[:digit:]]{3}\.[[:digit:]]{3}"
A maneira mais fácil é usar awk
, pois o número do campo é fixo.
awk '/Speed:/ {print $3}' screenlog.0
O $3
é o número da coluna. Você não deu a string completa, então talvez seja necessário alterar esse número.
pilot6@Pilot6:~$ echo "Total Speed: 118.604 Mh/s, Total Shares: 5...." | awk '/Speed:/ {print $3}'
118.604
Isso lhe dará todas as linhas, não as últimas 3. Você pode usar tail -n3
para filtrar as últimas 3 linhas:
tail -n3 screenlog.0 | awk '/Speed:/ {print $3}'
Você pode usar grep
com os look-behind e look-ahead ativadores do PCRE em grep
da seguinte forma:
tail -n3 in.txt | grep -Pzo '(?<=Total Speed: ).*?(?=Mh/s)'
118.604
118.604
118.604
Ou, resumindo, você pode usar \K
notify no lugar de lookbehind
:
grep -Pzo "Total Speed: \K.*(?=Mh/s)"
grep -Po 'Total Speed:\s*\K\d\S*' in.txt | tail -n 3