Bash скрипт не работает на многих файлах с помощью цикла for - PullRequest
0 голосов
/ 10 января 2020

Это мой сценарий:

#!/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

У меня много текстовых файлов с именами: eq2_8_new_1.ndx, eq2_8_new_2.ndx, ...... eq2_8_new_100.ndx

I попробуйте использовать мой скрипт на всех файлах. Я использую переменную "index" и для l oop, поэтому я ожидаю, что эта часть кода будет работать с каждым файлом

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

Вы видели это? Здесь у меня есть команда sed, которая будет работать с указанным c файлом (в конце строки у меня есть 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

Так что, если я использую для l oop (для индекса в {1..100}) Я ожидаю, что это будет работать для каждого текстового файла от eq2_8_new_1.ndx до eq2_8_new_100.ndx, НО мой сценарий изменяет только первый файл (eq2_8_new_1.ndx и в других файлах нет изменений).

Ответы [ 2 ]

1 голос
/ 10 января 2020

Используйте ls с подстановочным знаком, например:

for eqfile in `ls -l /*.ndx`
   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" $eqfile 
   done
0 голосов
/ 13 января 2020

Это не работает. У меня есть только цифры, и они не меняются на SOL, я не знаю, почему

...