Je souhaite concaténer deux fichiers ou plus en fonction de la présence ou de l'absence d'éléments dans un tableau.Bash: Cat basé sur la variable de tableau
Je lis ce genre de fichier ligne par ligne (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=()
Pour chaque ligne, le script extrait la chaîne sur la première colonne et il définit comme la pdbid variable. Ensuite, il prend la deuxième colonne et la définit comme un tableau (chaîne d'éléments $ c). Puis il vérifie si un fichier appelé $ {pdbid} _ $ {c} _p.pdb existe et, si c'est le cas, il fusionne son contenu dans le fichier $ {pdbid} _p _ $ {chaînes} .pdb
Ceci est le script:
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
le comportement attendu était de fusionner, par exemple, pour la première ligne, et 2PJY_p_B.pdb 2PJY_p_C.pdb dans un fichier appelé 2PJY_p_BC.pdb. Cependant, ce qu'il fait est de fusionner le premier fichier deux fois. Je ne peux pas comprendre pourquoi ...
Utilisez -vx 'set -vx' pour vous aider à déboguer les valeurs de vos variables? Bonne chance. – shellter