Você pode fazer isso em uma linha:
grep -Po 'siesta: Total = \K.*' "h2.$i.out" >> data.dat
Explicação:
-
-P
Use o regex compatível com Perl (PCRE), que suporta uma correspondência de padrões muito mais avançada -
-o
Imprimir apenas parte correspondente da linha (neste caso, apenas o número) -
\K
Não considere o anterior como parte da correspondência (Este é um recurso da PCRE.) -
.*
Corresponde zero ou mais de qualquer caractere (exceto uma nova linha)
Para imprimir $i
no arquivo na mesma linha que a saída do grep, execute printf '%s' "$i" >> data.dat
antes do comando grep. Eu suponho que você está rodando dentro de um loop, então isso funcionaria assim:
for i in ...; do
printf '%s' "$i" >> data.dat
grep -Po 'siesta: Total = \K.*' "h2.$i.out" >> data.dat
done