Valor de Grep como Número após “Total:”

0

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

    
por CampingCow 13.08.2017 / 14:26

4 respostas

1

Eu tenho esse uso simples do comando cut e grep :

cut -d: -f 2 mycut.txt | grep -Eo "[[:digit:]]{3}\.[[:digit:]]{3}"
    
por George Udosen 13.08.2017 / 16:14
1

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}'
    
por Pilot6 13.08.2017 / 15:19
1

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)"
    
por sddgob 13.08.2017 / 15:20
0
grep -Po 'Total Speed:\s*\K\d\S*' in.txt | tail -n 3
    
por JJoao 05.09.2017 / 17:55