Fiz alguns benchmarks e a saída é um único arquivo contendo vários resultados com o seguinte formato
[blaaa] 1st run T/V N NB P Q Time ========================== 2 3 4 1 2 1.02 [blaaaa...] 2nd run T/V N NB P Q Time ========================== 4 42 4 1 2 1.22
Desejo apenas obter os tempos de execução das diferentes execuções que fiz. Então, é possível usar o grep em “Tempo” e imprimir a próxima coluna? Ou até mesmo para imprimir apenas
1.02 1.22
para meu exemplo acima? Eu preferiria imprimir apenas as três colunas de resultados sem a parte blaa: D
Comentários
- Você quer dizer a mesma coluna, a próxima, mas uma linha ?
Resposta
Presumindo Time está sempre no sexto campo:
$ awk "$6 == "Time" {t = NR} t && NR == t+2 {print $6}" file 1.02 1.22
Alternativamente, você pode usar getline duas vezes – rápido “n” sujo :
awk "$6 == "Time" {getline; getline; print $6}" file
(“sujo” porque não verifica o getline valor de retorno).
Comentários
- Ou use
$NFse ' sempre a última coluna. - @Kusalananda sim bom argumento
Resposta
$ grep -o "Time\|[0-9\.]\+$" file Time 1.02 Time 1.22 $ grep -o "[0-9\.]\+$" file 1.02 1.22 $ grep -A2 ^T/V file T/V N NB P Q Time ========================== 2 3 4 1 2 1.02 -- T/V N NB P Q Time ========================== 4 42 4 1 2 1.22
Os resultados são separados por -- no último grep que pode ser removido com:
$ grep -A2 ^T/V file | grep -v "^--"
E com as ==== linhas removidas :
$ grep -A2 ^T/V file | grep -v "^--\|=\+"
Resposta
Você obteve duas respostas usando awk and grep, você também pode tentar sed:
sed -E "/===*/{N;s/.*([0-9]+\.[0-9]*)/\1/g};t;d" file_name
Aqui /===*/, corresponderá a ===.., então irá para a próxima linha e encontrará números de ponto flutuante com decimais entre eles e irá pular e excluir todas as outras linhas.
Ele imprimirá uma saída como:
1.02 1.22