0
我有兩套陣列與元件的可變數量,例如:嵌套循環與兩個陣列
鏈=(BC)
hresname =(BMA MAN NAG NDG)
我我解析了一些文件,這些文件可能包含給定位置的數組鏈中的元素以及數組hresname中不同位置的元素(在兩種情況下位置總是固定的)。這是數據的一個示例:
ATOM 5792 CB MET D 213 49.385 -5.683 125.489 1.00142.66 C
ATOM 5793 CG MET D 213 50.834 -5.674 125.990 1.00154.50 C
ATOM 5794 SD MET D 213 51.530 -7.337 126.277 1.00164.73 S
ATOM 5795 CE MET D 213 52.854 -7.386 125.068 1.00169.73 C
HETATM 5797 C1 NAG B 323 70.090 50.934 125.869 1.00 86.35 C
HETATM 5798 C2 NAG B 323 69.687 52.074 126.879 1.00 95.95 C
HETATM 5799 C3 NAG B 323 68.377 52.740 126.390 1.00 87.65 C
HETATM 5800 C4 NAG B 323 68.598 53.314 125.014 1.00 83.97 C
首先我需要複製開始的行ATOM其第五列匹配每個陣列鏈單獨的文件中的元素組成:
while read pdb ; do
for c in "${chain[@]}" ; do
#if [ ${#chain[@]} -eq 1 ] && \
if [ $(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
這非常適用(緩慢但確定)。註釋版本和未註釋版本均有效。
接下來,我想複製以HETATM並且其第4列相匹配的hresname的元素開始的行,但只有當這些線路也匹配的元件形成在cloumn數第五鏈數組:
while read pdb ; do
for c in "${chain[@]}" ; do
for h in "${hresname[@]}" ; do
if [ ${#chain[@]} -eq 1 ] && \
[ $(echo "$pdb" | cut -c1-6) == "HETATM" ] && \
[ $(echo "$pdb" | cut -c22-23) == "${chain[$c]}" ] \
[ $(echo "$pdb" | cut -c18-20) == "${hresname[$h]}" ] ; then
echo "$pdb" >> ../../properpdb/${pdbid}_${chain[$c]}.pdb
fi
done
done
done < ${pdbid}.pdb
然而,這不起作用。我反覆收到一個錯誤:
line 66: [: too many arguments
66行是:
[ $(echo "$pdb" | cut -c22-23) == "${chain[$c]}" ] \
因爲錯誤發生,即使我限制環含有單個元件鏈陣列哪個我感到困惑。
根據其他StackOverflow的問題,應該完全可以在bash中做到這一點。任何想法可能是什麼問題?
而你是對的(再次)。太感謝了。 – mirix