Analisar logs para determinados valores

3

Estou monitorando o histórico de convergência de um determinado problema. A saída do histórico é a seguinte:

Time = 24

Calculate volume forces from actuator disk
Total thrust = -8.46832
Total torque = 1.03471
ADisk volume = 0.0632799
smoothSolver:  Solving for Ux, Initial residual = 0.000447755, Final residual = 2.68745e-05, No Iterations 2
smoothSolver:  Solving for Uy, Initial residual = 0.0107909, Final residual = 0.000812227, No Iterations 2
smoothSolver:  Solving for Uz, Initial residual = 0.0103399, Final residual = 0.000786661, No Iterations 2
GAMG:  Solving for p, Initial residual = 0.123954, Final residual = 0.00958268, No Iterations 6
time step continuity errors : sum local = 7.42808e-05, global = -4.25546e-05, cumulative = 0.000413527
smoothSolver:  Solving for epsilon, Initial residual = 0.00197379, Final residual = 0.000172248, No Iterations 1
smoothSolver:  Solving for k, Initial residual = 0.000510499, Final residual = 2.78594e-05, No Iterations 2
ExecutionTime = 124.63 s  ClockTime = 125 s

Time = 25

Calculate volume forces from actuator disk
Total thrust = -8.49093
Total torque = 1.03723
ADisk volume = 0.0632799
smoothSolver:  Solving for Ux, Initial residual = 0.000409002, Final residual = 2.59552e-05, No Iterations 2
smoothSolver:  Solving for Uy, Initial residual = 0.0103191, Final residual = 0.00077024, No Iterations 2
smoothSolver:  Solving for Uz, Initial residual = 0.00985658, Final residual = 0.000742227, No Iterations 2
GAMG:  Solving for p, Initial residual = 0.0390756, Final residual = 0.00247253, No Iterations 7
time step continuity errors : sum local = 5.39785e-05, global = 3.40394e-05, cumulative = 0.000447566
smoothSolver:  Solving for epsilon, Initial residual = 0.00182397, Final residual = 0.000157739, No Iterations 1
smoothSolver:  Solving for k, Initial residual = 0.000465916, Final residual = 2.75864e-05, No Iterations 2
ExecutionTime = 129.45 s  ClockTime = 130 s

Time = 26

Calculate volume forces from actuator disk
Total thrust = -8.51463
Total torque = 1.03953
ADisk volume = 0.0632799

O que eu gostaria de fazer é copiar valores em um determinado momento, digamos, neste caso, em Time=26 , os valores de

Total thrust = -8.51463
Total torque = 1.03953

no seguinte formato:

1.03953 -8.51463.

Alguém pode me ajudar a fazer isso usando o shell script?

    
por user3780018 06.06.2017 / 06:01

2 respostas

5

Você solicitou um script de shell, mas esperamos que awk seja o seguinte:

find_thrust_torque.awk:

/^Total thrust =/ {thrust = $4}
/^Total torque =/ {torque = $4}
/^Time =/ {if (found) exit; if ($3 == time) found=1}
END {print torque " " thrust}

Teste:

$ awk -v time=25 -f find_thrust_torque.awk file1
1.03723 -8.49093

$ awk -v time=26 -f find_thrust_torque.awk file1
1.03953 -8.51463
    
por 06.06.2017 / 06:38
3

Aqui, escolhemos o intervalo de tempo mais o próximo (ou eof, se for o último). Isso é feito para evitar pegar os dados do próximo slot se o slot atual não tiver os números de torque / empuxo. Então, você seria servido com dados obsoletos sem nenhum relatório de erros em torno disso. O comando H anexa o espaço de padrão ao espaço de armazenamento. g recuperaria a área de espera e a colocaria no espaço padrão.

tslot=26; # input the time you want the thrust/torque data for
sed -ne '
   /^Time = '"${tslot}"'$/,/^Time =/!d
   /^Total thrust =/{H;d;}
   /^Total torque =/{H;d;}
   g;/\n.*\n/!d
   /thrust.*torque/s/\(\n.*\)\(\n.*\)//
   s/\n[^=]*=//gp;q
' logfile

Resultado

1.03953 -8.51463
    
por 06.06.2017 / 12:51