Seleciona uma parte do texto da saída 'wget' e registra em um arquivo?

2

Eu tenho este pequeno script para testar um site FTP:

#!/bin/bash

wget -O /dev/null ftp://someftpsite:[email protected]/testdump300 2>&1 | \
   grep '\([0-9.]\+ [M]B/s\)' >> wget300.log

E mostra a saída assim:

2018-07-26 22:30:06 (22.7 MB/s) - '/dev/null' saved [104857600]

Ok, e agora eu só quero que seja assim:

2018-07-26 22:30:06 22.7

Alguém que possa ajudar? Eu suspeito que devo usar awk ou sed ?

    
por jnj 27.07.2018 / 00:35

2 respostas

1

Usando awk :

$ wget -O /dev/null ftp://someftpsite:[email protected]/testdump300 2>&1 | \
   awk '/[0-9]+ [M]B\/s/{ sub("\(",""); print $1,$2,$3 }' >> wget300.log

Isso eliminará sua necessidade de grep , pois awk também pode pesquisar padrões de regex. Ele removerá o ( antes da velocidade e imprimirá as colunas 1, 2 e 3. (data, hora e velocidade).

    
por 27.07.2018 / 00:41
1

Aqui está uma alternativa usando sed :

$ wget -O /dev/null ftp://someftpsite:[email protected]/testdump300 2>&1 | \
   sed 's/(//;s/ [[:alpha:]]\+\/s.*$//' >> wget300.log

Como funciona:

  • s/(//; - exclui o primeiro parêntese
  • s/ [[:alpha:]]\+\/s.*$// - exclui tudo a partir do espaço + 'MB / s' até o final .*$ .

Outra maneira de usar perl :

$ wget -O /dev/null ftp://someftpsite:[email protected]/testdump300 2>&1 | \
   perl -lne 'print "$1 $2" if /^(.*)\s\((\S+)/' >> wget300.og

Como funciona:

  • qualquer coisa entre parênteses em Perl será salva, por isso as variáveis $1 e $2 . Neste caso, estamos combinando tudo até, mas não incluindo o espaço + parênteses em $1 e tudo depois do parêntese aberto que não é um espaço \S+ na segunda variável, $2 .
por 27.07.2018 / 03:05