bash :Условие IF с ключевым миром в цикле FOR

Предположим, что вы делаете это вbash:

sequence="AAAGCATATGCTAGCCCGTATAGCGATACTAGCTATACGATATATATGATCAATGCCCGTATAG"

for (( i = 0; i < ${#sequence}; i += 3 )); do
    printf '%s\n' "${sequence:i:3}"
done

Это повторяется по всей длине последовательности, по три пары оснований -за раз. На каждой итерации печатается следующая группа из трех оснований.

Чтобы поместить их в массив, seqвместо того, чтобы распечатывать их:

sequence="AAAGCATATGCTAGCCCGTATAGCGATACTAGCTATACGATATATATGATCAATGCCCGTATAG"

for (( i = 0; i < ${#sequence}; i += 3 )); do
    seq+=( "${sequence:i:3}" )
done

Это дает вам массив seq. Отдельные элементы массива доступны как "${seq[0]}", "${seq[1]}"и т. д.

Чтобы получить две другие рамки считывания , измените цикл так, чтобы он начинался с 1 или 2.

-1
13.11.2020, 17:09
1 ответ

Ошибка, вероятно, связана с тем, что вам нужен пробел после ==, однако вы не сможете использовать такие подстановочные знаки в расширенном тесте. Вы можете использовать =~для сопоставления регулярных выражений (что-то вроде AllBoxes.*), однако, если вы процитируете его, оно будет обработано буквально. Если вас интересуют только файлы AllBoxes, вы можете просто изменить цикл на:

for pdb in "${storage}/${experiment}"/AllBoxes*.pdb ; do
2
18.03.2021, 22:49

Теги

Похожие вопросы