Skrypt bash (w tym sed) wykonujący się na wielu plikach przy użyciu pętli for.

0

Oto mój skrypt:

#!/bin/bash
SOL_atom_index=116101
number=1
SOL_mol_index=SOL$number
index=1
for index in {1..100}
do
	for SOL_index in {116101..136845}
	do
        	sed -i "s/$SOL_atom_index/$SOL_mol_index/g;s/$(($SOL_atom_index+1))/$SOL_mol_index/g;s/$(($SOL_atom_index+2))/$SOL_mol_index/g" eq2_8_new_$index.ndx
        	SOL_atom_index=$(($SOL_atom_index+3))
		number=$(($number+1))
		SOL_mol_index=SOL$number
	done
done

Mam wiele plików, na których chciałbym, żeby działał: eq2_8_new_1.ndx, eq2_8_new_2.ndx, ...... eq2_8_new_100.ndx

Próbuję go użyć na wielu plikach, tak aby ni musiał go wklepywać 100 razy i zmieniać, używam zmiennej "index" and pętli for, więc oczekuję, że ta część kodu będzie działać na każdym pliku

for SOL_index in {116101..136845}
	do
        	sed -i "s/$SOL_atom_index/$SOL_mol_index/g;s/$(($SOL_atom_index+1))/$SOL_mol_index/g;s/$(($SOL_atom_index+2))/$SOL_mol_index/g" eq2_8_new_$index.ndx
        	SOL_atom_index=$(($SOL_atom_index+3))
		number=$(($number+1))
		SOL_mol_index=SOL$number
	done

Widzicie to? Tutaj używam seda, który działa na kolejne pliki w pętli (na końcu linii mam eq2_8_new_$index.ndx

            sed -i "s/$SOL_atom_index/$SOL_mol_index/g;s/$(($SOL_atom_index+1))/$SOL_mol_index/g;s/$(($SOL_atom_index+2))/$SOL_mol_index/g" eq2_8_new_$index.ndx

Więc jeśli używam for loop (for index in {1..100}) to oczekuję, że to będzie działać na każdym kolejnym pliku od eq2_8_new_1.ndx do eq2_8_new_100.ndx
ALE mój skrypt zmienia tylko pierwszy plik (eq2_8_new_1.ndx i nie ma zmian w kolejnych).

1

Jesteś pewien, że skrypt wykonał się w całości bez błędów.
Przy sprawdzaniu, co tam się dzieje, może być pomocna flaga basha -x.

1 użytkowników online, w tym zalogowanych: 0, gości: 1