Por que o grep não me dá todas as strings encontradas?

2

Eu tenho um arquivo txt cujo interior há 8 vezes a sequência "ATOMIC_POSITIONS" e quando estou tentando escrever cada uma delas com

AtomicPos=$(grep -n "ATOMIC_POSITIONS" hw1_out_si_wire.txt)
echo $AtomicPos

Isso me dá apenas o último

4779:ATOMIC_POSITIONS (bohr)

4779 é o número da linha, onde é o último.Na verdade, depois disso eu ia pegar o último para poder pegar as próximas linhas depois da última "ATOMIC_POSITIONS", mas, portanto, isso me dá diretamente o último, então continuei assim:

$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

Mas quando eu executo isso, ele começa a partir do primeiro "ATOMIC_POSITIONS" e continua.

Alguém poderia explicar por que isso acontece?

    
por onurcanbektas 04.06.2016 / 12:19

1 resposta

2

Para ler a saída do grep em um array, você precisa mudar

AtomicPos=$(grep -n "ATOMIC_POSITIONS" hw1_out_si_wire.txt)

para

AtomicPos=( $(grep -n "ATOMIC_POSITIONS" hw1_out_si_wire.txt) )

Dessa forma, você terá todos os padrões correspondentes em AtomicPos e, em seguida, fará um loop sobre a matriz e imprimirá cada elemento.

    
por 04.06.2016 / 12:29

Tags