名前に配列の要素が含まれているかどうかに応じて、2 つ以上のファイルを連結したいと考えています。
この種のファイルを 1 行ずつ読み込んでいます (proteome.pisa):
2PJY_p chain=(B C) hresname=() hresnumber=() hatom=() model=() altconf=()
2Q7N_p chain=(A E F G H I J K L) hresname=(FUC MAN NAG) hresnumber=() hatom=() model=() altconf=()
各行について、スクリプトは最初の列の文字列を抽出し、変数 pdbid として定義します。次に、2 番目の列を取り、それを配列 (要素のチェーン $c) として定義します。次に、${pdbid}_${c}_p.pdb というファイルが存在するかどうかを確認し、存在する場合は、その内容をファイル ${pdbid}_p_${chains}.pdb にマージします。
これはスクリプトです:
while read line ; do
echo "$line" > pdb.line
cut -f1 pdb.line > pdb.list
sed -i 's/.*/\"&\"/' pdb.list
sed -i 's/_p//g' pdb.list
awk '{ printf "pdbid="; print }' pdb.list > pdbid.list
cut -f2 pdb.line > chain.list
source pdbid.list
source chain.list
chains=`printf "%s" "${chain[@]}"`
for c in ${chain[@]} ; do
if [ ${#chain[@]} -gt 1 ] && \
[ -f ${pdbid}_${c}_p.pdb ] ; then
cat ${pdbid}_${chain[$c]}_p.pdb >> ${pdbid}_p_${chains}.pdb
fi
done
done < proteome.pisa
たとえば、最初の行の 2PJY_p_B.pdb と 2PJY_p_C.pdb が 2PJY_p_BC.pdb という名前のファイルにマージされることが予想されていました。ただし、実際に行うことは、最初のファイルを 2 回マージすることです。なぜだか理解できません...