Я анализирую несколько файлов и копирую строки, соответствующие двум условиям, в новый файл. Сценарий ведет себя по-разному в зависимости от размера массива:
while read pdb ; do
# for c in "${chain[@]}" ; do
for ((c=0; c<${#chain[@]}; c++)) ; do
if [ ${#chain[@]} -eq 1 ] && [ "$(echo "$pdb" | cut -c1-4)" == "ATOM" ] && [ "$(echo "$pdb" | cut -c22-23)" == "${chain[$c]}" ] ; then
echo "$pdb" >> ../../properpdb/${pdbid}_${chain[$c]}.pdb
fi
done
done < ${pdbid}.pdb
Это работает, но только если я удалю последнее условие (которое ссылается на определенный элемент массива). Я пробовал много разных синтаксисов (двойные квадратные скобки, используя $ {c} вместо $ {chain [$ c]} и т. Д.) Безрезультатно.
Это $ {pdbid} .pdb
ATOM 13 CA SER A 9 107.761 75.138 27.465 1.00 24.92 C
ATOM 14 C SER A 9 107.081 73.915 26.851 1.00 21.25 C
ATOM 15 O SER A 9 105.984 73.987 26.313 1.00 24.75 O
ATOM 16 CB SER A 9 107.956 76.218 26.399 1.00 30.66 C
Это один из массивов:
chain=(A)
Debug:
+ read pdb
+ for c in '"${chain[@]}"'
+ '[' 1 -eq 1 ']'
++ echo 'ATOM 1916 CZ3 TRP B 43 -15.691 19.837 49.406 1.00 12.45 C'
++ cut -c1-4
+ '[' ATOM == ATOM ']'
++ echo 'ATOM 1916 CZ3 TRP B 43 -15.691 19.837 49.406 1.00 12.45 C'
++ cut -c22-23
+ [[ A == B ]]
+ read pdb
Все кажется правильным, за исключением того, что последнее условие не заключено в одинарные кавычки. Нет выходных данных, даже если A == A. Если я уберу это условие, оно будет работать.