これは私のスクリプトです。
#!/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]}
表示されません。
編集するこれで、出力がソートされた理由がわかります。>> Energy
2番目のものの後に追加するのを忘れました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]}
出力が表示されます。