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
$NF
se ' 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