이상한 출력을 위해

이상한 출력을 위해

이것은 내 스크립트입니다.

#!/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에서 시작하여 루프 반복마다 1씩 증가합니다. A[j]루프에 값을 할당한 다음 이를 증가시킨 다음 j인쇄하려고 합니다 A[j]. 그러나 이제 j값이 증가되었으므로 인덱스가 A아직 설정되지 않았으므로 인쇄할 것이 없습니다(변수는 아무것도 확장되지 않습니다). 인쇄 중인 경우 ${A[j-1]}출력이 표시됩니다.

관련 정보