奇妙な出力のために

奇妙な出力のために

これは私のスクリプトです。

#!/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

出力は次のとおりです

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

そうしてはいけません。出力順序は「ソート」されて${A[j]}表示されません。

編集するこれで、出力がソートされた理由がわかります。>> Energy2番目のものの後に追加するのを忘れましたecho。配列の問題がまだ存在します。私の入力データは大きく、関連する行だけを抽出します。

print energy 2 - 1 end
  Local net energy (PE 0) = 2.692036739192E+03 kJ/mol
  Global net ELEC energy = 2.692036739192E+03 kJ/mol

答え1

スクリプトではj単調に増加します。 0 から始まり、ループ反復ごとに 1 ずつ増加します。A[j]ループに値を割り当て、それをインクリメントしてからj印刷しようとしますA[j]。ただし、j値が増えたため、インデックスがAまだ設定されていないため、印刷することはありません(変数は何も拡張されません)。印刷中の場合、${A[j-1]}出力が表示されます。

関連情報