Si il y a noté "too many open files" cela signifie que le nombre de fichiers ouverts simultanément dépasse la limite fixée par le système. Pour contourner ce problème, vous pouvez augmenter cette limite temporairement ou fusionner les fichiers en plusieurs étapes.
Vérifier la limite actuelle :
ulimit-n
Augmenter la limite (pour la session actuelle) :
ulimit-n4096
Fusionner en plusieurs étapes
Si vous ne pouvez pas augmenter la limite, vous pouvez fusionner les fichiers par lots. Voici un script pour fusionner les fichiers par lots de 100 fichiers à la fois :
#!/bin/bashSOURCE_DIR="/chemin/vers/votre/dossier"# Remplacez par le chemin de votre dossier contenant les fichiers .bamTEMP_DIR="${SOURCE_DIR}/temp"MERGED_FILE="${SOURCE_DIR}/merged.bam"# Créer un dossier temporairemkdir-p"$TEMP_DIR"# Copier les fichiers .bam dans le dossier temporaire pour un traitement par lotscp"$SOURCE_DIR"/*.bam"$TEMP_DIR"# Fusionner les fichiers par lots de 100counter=0batch_files=()for file in"$TEMP_DIR"/*.bam; do batch_files+=("$file") counter=$((counter+1))if [ "$counter"-eq100 ]; thensamtoolsmerge"temp_merged_$counter.bam""${batch_files[@]}" batch_files=() counter=0fidone# Fusionner le reste des fichiers s'il y en aif [ "${#batch_files[@]}"-gt0 ]; thensamtoolsmerge"temp_merged_last.bam""${batch_files[@]}"fi# Fusionner tous les fichiers temporairessamtoolsmerge"$MERGED_FILE""$TEMP_DIR"/temp_merged_*.bam# Nettoyer les fichiers temporairesrm-r"$TEMP_DIR"echo"Fusion terminée. Fichier fusionné: $MERGED_FILE"
Fusionner des dossiers de BAM automatiquement
Ce genre de fichier bash permettent de fusionner un dossier BAM et quand cette première fusion aura fini, une seconde commencera. Cela permet d'éviter de retaper une commande quand la première a fini.
#!/bin/bashmkdir-p"C:/path/to/bam_merged"samtoolsmerge"C:/path/to/bam_merged/merged.bam""C:/path/to/bam/*.bamecho "MergingcompleteforBAMfilesinC:/path/to/bam_merged/"mkdir -p "C:/path/to/bam_merged2"samtools merge "C:/path/to/bam_merged2/merged.bam" "C:/path/to/bam2/*.bamecho"Merging complete for BAM files in C:/path/to/bam_merged2/"
Script python permettant de creer le bash via interface graphique