Esta é uma questão SOS. Meu professor me pediu para obter a saída de um código de simulação de longa duração que nos foi legado por um ex-post-doc (que me explicara seu funcionamento).
Eu fiz alguns testes em pequena escala e tudo correu bem. Então eu comecei a simulação completa cerca de um mês atrás e tem sido executado continuamente desde então. Mas apenas alguns minutos atrás, devido a alguns problemas de memória, o programa travou antes que pudesse gravar a saída tabular formatada em disco.
Felizmente, eu tinha ativado o eco de terminal dos resultados intermediários e defini meu histórico de rolagem para um valor maior. Consegui salvar a saída parcial digitando o modo de retrocesso e copiando todo o despejo de terminal em um arquivo de texto (e também fiz cópias de backup dele).
Agora, esta saída de terminal é bastante detalhada (intencionalmente definida para fins de depuração). A seguir, um instantâneo do arquivo de texto de saída de terminal recuperado (vamos chamá-lo de terminal_output.txt
)
1 Linear search iteration no. 1 begins: Attempting to blah blah with 1 ...
2 blah blah
3 blah
4 blah blah blah
5 lorem ipsum
.........
........
75 Success with 128 blah ....
76 blah blah
77 blah blah
78 result_flag: 1, exit_reason: 6
79 blah
80 Completed optimal computation with T_init = 25.00 degC & T_sink = 35.00 degC
E então esse padrão exato se repete. por exemplo,
81 Linear search iteration no. 2 begins: Attempting to blah blah with 1 ...
82 blah
......
95 Success with 307 blah ....
......
......
100 Completed optimal computation with T_init = 30.00 degC & T_sink = 40.00 degC
Meu requisito é extrair as seguintes informações para produzir uma saída tabular como:
25 35 128
30 40 307
...........
...........
i.e. o 1º & As colunas 2 são dos valores numéricos correspondentes a T_init
e T_sink
respectivamente, a partir dessas linhas começam com Completed
. A terceira coluna é o valor numérico da linha que começa com Success
(que é sempre 5 linhas antes de Completed
, se isso ajudar). Qualquer separador entre as colunas é aceitável, seja espaços, tabulações ou vírgulas.
Eu desejo fazer isso de forma nativa usando os utilitários * nix padrão, como grep
, sed
e awk
ou mesmo vi/vim
. As linhas de um-cano unidas ou os scripts bash
estão bem. Se necessário, estou aberto a usar python
, perl
ou outras linguagens de script também.