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

Odpowiedz Nowy wątek
2020-01-13 13:29
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_8new$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).

Pozostało 580 znaków

2020-01-14 22:42
0

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.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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