这是我的脚本:
#!/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
在第二个之后添加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 开始,每次循环迭代加一。您A[j]
在循环中分配一个值,然后递增j
,然后尝试打印出来A[j]
- 但现在j
已经递增,索引A
尚未设置,因此没有任何内容可打印(变量扩展为空)。如果您正在打印${A[j-1]}
,您应该会看到输出。