8개의 "ATOMIC_POSITIONS" 문자열이 포함된 txt 파일이 있는데 각각에 ;
AtomicPos=$(grep -n "ATOMIC_POSITIONS" hw1_out_si_wire.txt)
echo $AtomicPos
나한테 마지막 하나만 줬어
4779:ATOMIC_POSITIONS (bohr)
4779는 줄 번호, 마지막 줄입니다. 사실 그 후에는 마지막 "ATOMIC_POSITIONS" 이후의 행을 가져오려고 마지막 행을 가져오려고 했지만, 따라서 마지막 행을 직접 제공하므로 다음과 같이 계속합니다.
$NtL=262
i=1
until [ $i == $NtL ]
do
Pos=$(grep -A $i ATOMIC_POSITIONS hw1_out_si_wire.txt)
echo $Pos
i=$(expr $i + 1)
unset Pos
done
하지만 실행하면 첫 번째 "ATOMIC_POSITIONS"부터 시작해서 계속됩니다.
누군가 이것이 왜 설명할 수 있습니까?
답변1
grep 출력을 배열로 읽으려면 다음을 변경해야 합니다.
AtomicPos=$(grep -n "ATOMIC_POSITIONS" hw1_out_si_wire.txt)
도착하다
AtomicPos=( $(grep -n "ATOMIC_POSITIONS" hw1_out_si_wire.txt) )
이렇게 하면 일치하는 모든 패턴을 갖게 되고 AtomicPos
배열을 반복하여 각 요소를 인쇄하게 됩니다.