Para saída estranha

0

Este é o meu script:

#!/bin/bash
E=0;j=0
for i in A B C
do
  Erray=$(sed -n '/Local net energy/p' log | awk '{print $7}')
  A[j]=j
  echo $i = $Erray kJ/mol >> Energy
  let j=j+1
  echo $j $i $Erray ${A[j]}
done
cat Energy

A saída é:

1 A 2.692036739192E+03
2 B 2.679751695663E+03
3 C 4.732453844269E+03
A = 2.692036739192E+03 kJ/mol
B = 2.679751695663E+03 kJ/mol
C = 4.732453844269E+03 kJ/mol

Não deveria ser isso. A ordem da saída é "classificada" e o ${A[j]} não aparece.

Editar Agora eu sei porque a saída está classificada. Esqueci de adicionar >> Energy após o segundo echo . O problema da matriz ainda permanece. Meus dados de entrada são grandes, eu apenas extraio linhas que são relevantes.

print energy 2 - 1 end
  Local net energy (PE 0) = 2.692036739192E+03 kJ/mol
  Global net ELEC energy = 2.692036739192E+03 kJ/mol
    
por Ooker 25.05.2014 / 14:40

1 resposta

2

No seu script, j é monotonicamente incremental - começa em 0 e conta em um por iteração do loop. Você atribui um valor a A[j] em seu loop, depois você aumenta j e, em seguida, tenta imprimir A[j] - mas agora que j foi incrementado, esse índice em A não foi definido ainda assim, não há nada para imprimir (a expansão da variável está vazia). Se você estava imprimindo ${A[j-1]} , você deveria ver a saída.

    
por 25.05.2014 / 19:18