Skip to content

Latest commit

 

History

History
937 lines (837 loc) · 26.8 KB

work_MultiQC.md

File metadata and controls

937 lines (837 loc) · 26.8 KB

#work_MultiQC.md

Table of contents
  1. Perform FastQC analyses
    1. Grab a node, get situated, make necessary outdirectories
      1. Code
      2. Printed
    2. Run FastQC on fastqs
      1. Create arrays of fastq files of interest
        1. Code
      2. Use GNU parallel to run FastQC on fastq array elements
        1. Code
    3. Run FastQC on bams
      1. Create arrays of bam files of interest
        1. Code
      2. Use GNU parallel to run FastQC on bam array elements
        1. Code
  2. Run MultiQC
    1. Code


Perform FastQC analyses

Grab a node, get situated, make necessary outdirectories

Code

Code: Grab a node, get situated, make necessary outdirectories
#!/bin/bash

cd "${HOME}/tsukiyamalab/kalavatt/2022_transcriptome-construction/results/2023-0115"
grabnode  # 16, etc.
Trinity_env

if [[ ! -d FastQC/fastqs_UMI-dedup ]]; then
    mkdir -p FastQC/fastqs_UMI-dedup/{atria_trim,rcorrector,rcorrector_clean-up,symlinks,umi-tools_extract}
fi

if [[ ! -d FastQC/bams_UMI-dedup ]]; then
    mkdir -p FastQC/bams_UMI-dedup/{aligned_umi-extracted_trimmed,aligned_umi-extracted_trimmed_kmer-corrected,aligned_UTK_primary,aligned_UTK_primary_dedup-pos}
    mkdir -p FastQC/bams_UMI-dedup/{aligned_UTK_primary_dedup-UMI,aligned_UTK_primary-secondary,aligned_UTK_primary-secondary_sans-KL-20S}
    mkdir -p FastQC/bams_UMI-dedup/{aligned_UTK_primary-secondary_sans-KL-20S_bam-to-fastq,aligned_UTK_primary-secondary_sans-KL-20S_merged}
    mkdir -p FastQC/bams_UMI-dedup/{aligned_UTK_primary-secondary_sans-KL-20S_merged_bam-to-fastq,aligned_UTK_primary-unmapped}
    mkdir -p FastQC/bams_UMI-dedup/{aligned_UTK_primary-unmapped_sans-KL-20S,aligned_UTK_primary-unmapped_sans-KL-20S_bam-to-fastq}
    mkdir -p FastQC/bams_UMI-dedup/{aligned_UTK_primary-unmapped_sans-KL-20S_merged,aligned_UTK_primary-unmapped_sans-KL-20S_merged_bam-to-fastq}
    mkdir -p FastQC/bams_UMI-dedup/{aligned_UT_primary,aligned_UT_primary_dedup-pos,aligned_UT_primary_dedup-UMI}
    mkdir -p FastQC/bams_UMI-dedup/{to-align_umi-extracted_trimmed,to-align_umi-extracted_trimmed_kmer-corrected}
fi

Printed

Printed: Get situated, make outdirectories
❯ if [[ ! -d FastQC/fastqs_UMI-dedup ]]; then
>     mkdir -p FastQC/fastqs_UMI-dedup/{atria_trim,rcorrector,rcorrector_clean-up,symlinks,umi-tools_extract}
> fi
mkdir: created directory 'FastQC'
mkdir: created directory 'FastQC/fastqs_UMI-dedup'
mkdir: created directory 'FastQC/fastqs_UMI-dedup/atria_trim'
mkdir: created directory 'FastQC/fastqs_UMI-dedup/rcorrector'
mkdir: created directory 'FastQC/fastqs_UMI-dedup/rcorrector_clean-up'
mkdir: created directory 'FastQC/fastqs_UMI-dedup/symlinks'
mkdir: created directory 'FastQC/fastqs_UMI-dedup/umi-tools_extract'


❯ if [[ ! -d FastQC/bams_UMI-dedup ]]; then
>     mkdir -p FastQC/bams_UMI-dedup/{aligned_umi-extracted_trimmed,aligned_umi-extracted_trimmed_kmer-corrected,aligned_UTK_primary,aligned_UTK_primary_dedup-pos}
>     mkdir -p FastQC/bams_UMI-dedup/{aligned_UTK_primary_dedup-UMI,aligned_UTK_primary-secondary,aligned_UTK_primary-secondary_sans-KL-20S}
>     mkdir -p FastQC/bams_UMI-dedup/{aligned_UTK_primary-secondary_sans-KL-20S_bam-to-fastq,aligned_UTK_primary-secondary_sans-KL-20S_merged}
>     mkdir -p FastQC/bams_UMI-dedup/{aligned_UTK_primary-secondary_sans-KL-20S_merged_bam-to-fastq,aligned_UTK_primary-unmapped}
>     mkdir -p FastQC/bams_UMI-dedup/{aligned_UTK_primary-unmapped_sans-KL-20S,aligned_UTK_primary-unmapped_sans-KL-20S_bam-to-fastq}
>     mkdir -p FastQC/bams_UMI-dedup/{aligned_UTK_primary-unmapped_sans-KL-20S_merged,aligned_UTK_primary-unmapped_sans-KL-20S_merged_bam-to-fastq}
>     mkdir -p FastQC/bams_UMI-dedup/{aligned_UT_primary,aligned_UT_primary_dedup-pos,aligned_UT_primary_dedup-UMI}
>     mkdir -p FastQC/bams_UMI-dedup/{to-align_umi-extracted_trimmed,to-align_umi-extracted_trimmed_kmer-corrected}
> fi
mkdir: created directory 'FastQC/bams_UMI-dedup'
mkdir: created directory 'FastQC/bams_UMI-dedup/aligned_umi-extracted_trimmed'
mkdir: created directory 'FastQC/bams_UMI-dedup/aligned_umi-extracted_trimmed_kmer-corrected'
mkdir: created directory 'FastQC/bams_UMI-dedup/aligned_UTK_primary'
mkdir: created directory 'FastQC/bams_UMI-dedup/aligned_UTK_primary_dedup-pos'
mkdir: created directory 'FastQC/bams_UMI-dedup/aligned_UTK_primary_dedup-UMI'
mkdir: created directory 'FastQC/bams_UMI-dedup/aligned_UTK_primary-secondary'
mkdir: created directory 'FastQC/bams_UMI-dedup/aligned_UTK_primary-secondary_sans-KL-20S'
mkdir: created directory 'FastQC/bams_UMI-dedup/aligned_UTK_primary-secondary_sans-KL-20S_bam-to-fastq'
mkdir: created directory 'FastQC/bams_UMI-dedup/aligned_UTK_primary-secondary_sans-KL-20S_merged'
mkdir: created directory 'FastQC/bams_UMI-dedup/aligned_UTK_primary-secondary_sans-KL-20S_merged_bam-to-fastq'
mkdir: created directory 'FastQC/bams_UMI-dedup/aligned_UTK_primary-unmapped'
mkdir: created directory 'FastQC/bams_UMI-dedup/aligned_UTK_primary-unmapped_sans-KL-20S'
mkdir: created directory 'FastQC/bams_UMI-dedup/aligned_UTK_primary-unmapped_sans-KL-20S_bam-to-fastq'
mkdir: created directory 'FastQC/bams_UMI-dedup/aligned_UTK_primary-unmapped_sans-KL-20S_merged'
mkdir: created directory 'FastQC/bams_UMI-dedup/aligned_UTK_primary-unmapped_sans-KL-20S_merged_bam-to-fastq'
mkdir: created directory 'FastQC/bams_UMI-dedup/aligned_UT_primary'
mkdir: created directory 'FastQC/bams_UMI-dedup/aligned_UT_primary_dedup-pos'
mkdir: created directory 'FastQC/bams_UMI-dedup/aligned_UT_primary_dedup-UMI'
mkdir: created directory 'FastQC/bams_UMI-dedup/to-align_umi-extracted_trimmed'
mkdir: created directory 'FastQC/bams_UMI-dedup/to-align_umi-extracted_trimmed_kmer-corrected'

Run FastQC on fastqs

Create arrays of fastq files of interest

Code
Code: Create arrays of fastq files of interest bams
#!/bin/bash

#  Symlinked fastqs ---------------------------------------
unset fqs_sym
typeset -a fqs_sym
while IFS=" " read -r -d $'\0'; do
    fqs_sym+=( "${REPLY%_R?_001.fastq.gz}" )
done < <(\
    find "fastqs_UMI-dedup/symlinks" \
        -type l \
        -name "*.fastq.gz" \
        -print0 \
            | sort -z \
)
echo_test "${fqs_sym[@]}"
echo "${#fqs_sym[@]}"

IFS=" " read -r -a fqs_sym \
    <<< "$(\
        tr ' ' '\n' \
            <<< "${fqs_sym[@]}" \
                | sort -u \
                | tr '\n' ' '\
    )"
echo_test "${fqs_sym[@]}"
echo "${#fqs_sym[@]}"

unset fqs_sym_r1
unset fqs_sym_r2
typeset -a fqs_sym_r1
typeset -a fqs_sym_r2
for i in "${fqs_sym[@]}"; do
    fqs_sym_r1+=("${i}_R1_001.fastq.gz")
    fqs_sym_r2+=("${i}_R3_001.fastq.gz")
done
echo_test "${fqs_sym_r1[@]}"
echo "${#fqs_sym_r1[@]}"
echo_test "${fqs_sym_r2[@]}"
echo "${#fqs_sym_r2[@]}"
# ., fastqs_UMI-dedup/symlinks/5781_G1_IN_S5_R1_001.fastq.gz


#  UMI-extracted fastqs -----------------------------------
unset fqs_UMI
typeset -a fqs_UMI
while IFS=" " read -r -d $'\0'; do
    fqs_UMI+=( "${REPLY%_R?.UMI.fq.gz}" )
done < <(\
    find "fastqs_UMI-dedup/umi-tools_extract" \
        -type f \
        -name "*.UMI.fq.gz" \
        -print0 \
            | sort -z \
)
echo_test "${fqs_UMI[@]}"
echo "${#fqs_UMI[@]}"

IFS=" " read -r -a fqs_UMI \
    <<< "$(\
        tr ' ' '\n' \
            <<< "${fqs_UMI[@]}" \
                | sort -u \
                | tr '\n' ' '\
    )"
echo_test "${fqs_UMI[@]}"
echo "${#fqs_UMI[@]}"

unset fqs_UMI_r1
unset fqs_UMI_r2
typeset -a fqs_UMI_r1
typeset -a fqs_UMI_r2
for i in "${fqs_UMI[@]}"; do
    fqs_UMI_r1+=("${i}_R1.UMI.fq.gz")
    fqs_UMI_r2+=("${i}_R3.UMI.fq.gz")
done
echo_test "${fqs_UMI_r1[@]}"
echo "${#fqs_UMI_r1[@]}"
echo_test "${fqs_UMI_r2[@]}"
echo "${#fqs_UMI_r2[@]}"
# ., fastqs_UMI-dedup/umi-tools_extract/5781_G1_IN_S5_R3.UMI.fq.gz


#  atria-trimmed fastqs -----------------------------------
unset fqs_atria
typeset -a fqs_atria
while IFS=" " read -r -d $'\0'; do
    fqs_atria+=( "${REPLY%_R?.UMI.atria.fq.gz}" )
done < <(\
    find "fastqs_UMI-dedup/atria_trim" \
        -maxdepth 1 \
        -type f \
        -name "*.UMI.atria.fq.gz" \
        -print0 \
            | sort -z \
)
echo_test "${fqs_atria[@]}"
echo "${#fqs_atria[@]}"

IFS=" " read -r -a fqs_atria \
    <<< "$(\
        tr ' ' '\n' \
            <<< "${fqs_atria[@]}" \
                | sort -u \
                | tr '\n' ' '\
    )"
echo_test "${fqs_atria[@]}"
echo "${#fqs_atria[@]}"

unset fqs_atria_r1
unset fqs_atria_r2
typeset -a fqs_atria_r1
typeset -a fqs_atria_r2
for i in "${fqs_atria[@]}"; do
    fqs_atria_r1+=("${i}_R1.UMI.atria.fq.gz")
    fqs_atria_r2+=("${i}_R3.UMI.atria.fq.gz")
done
echo_test "${fqs_atria_r1[@]}"
echo "${#fqs_atria_r1[@]}"
echo_test "${fqs_atria_r2[@]}"
echo "${#fqs_atria_r2[@]}"
# ., fastqs_UMI-dedup/atria_trim/5781_G1_IN_S5_R3.UMI.atria.fq.gz


#  rcorrected fastqs -------------------------------------
unset fqs_rcor
typeset -a fqs_rcor
while IFS=" " read -r -d $'\0'; do
    fqs_rcor+=( "${REPLY%_R?.UMI.atria.cor.fq.gz}" )
done < <(\
    find "fastqs_UMI-dedup/rcorrector" \
        -maxdepth 1 \
        -type f \
        -name "*.UMI.atria.cor.fq.gz" \
        -print0 \
            | sort -z \
)
echo_test "${fqs_rcor[@]}"
echo "${#fqs_rcor[@]}"

IFS=" " read -r -a fqs_rcor \
    <<< "$(\
        tr ' ' '\n' \
            <<< "${fqs_rcor[@]}" \
                | sort -u \
                | tr '\n' ' '\
    )"
echo_test "${fqs_rcor[@]}"
echo "${#fqs_rcor[@]}"

unset fqs_rcor_r1
unset fqs_rcor_r2
typeset -a fqs_rcor_r1
typeset -a fqs_rcor_r2
for i in "${fqs_rcor[@]}"; do
    fqs_rcor_r1+=("${i}_R1.UMI.atria.cor.fq.gz")
    fqs_rcor_r2+=("${i}_R3.UMI.atria.cor.fq.gz")
done
echo_test "${fqs_rcor_r1[@]}"
echo "${#fqs_rcor_r1[@]}"
echo_test "${fqs_rcor_r2[@]}"
echo "${#fqs_rcor_r2[@]}"
# ., fastqs_UMI-dedup/rcorrector/5781_G1_IN_S5_R3.UMI.atria.cor.fq.gz


#  rcorrector-corrected fastqs ----------------------------
unset fqs_rcor_cor
typeset -a fqs_rcor_cor
while IFS=" " read -r -d $'\0'; do
    fqs_rcor_cor+=( "${REPLY%_R?.UMI.atria.cor.rm-unfx.fq.gz}" )
done < <(\
    find "fastqs_UMI-dedup/rcorrector_clean-up" \
        -maxdepth 1 \
        -type f \
        -name "*.UMI.atria.cor.rm-unfx.fq.gz" \
        -print0 \
            | sort -z \
)
echo_test "${fqs_rcor_cor[@]}"
echo "${#fqs_rcor_cor[@]}"

IFS=" " read -r -a fqs_rcor_cor \
    <<< "$(\
        tr ' ' '\n' \
            <<< "${fqs_rcor_cor[@]}" \
                | sort -u \
                | tr '\n' ' '\
    )"
echo_test "${fqs_rcor_cor[@]}"
echo "${#fqs_rcor_cor[@]}"

unset fqs_rcor_cor_r1
unset fqs_rcor_cor_r2
typeset -a fqs_rcor_cor_r1
typeset -a fqs_rcor_cor_r2
for i in "${fqs_rcor_cor[@]}"; do
    fqs_rcor_cor_r1+=("${i}_R1.UMI.atria.cor.rm-unfx.fq.gz")
    fqs_rcor_cor_r2+=("${i}_R3.UMI.atria.cor.rm-unfx.fq.gz")
done
echo_test "${fqs_rcor_cor_r1[@]}"
echo "${#fqs_rcor_cor_r1[@]}"
echo_test "${fqs_rcor_cor_r2[@]}"
echo "${#fqs_rcor_cor_r2[@]}"
# ., fastqs_UMI-dedup/rcorrector_clean-up/5781_G1_IN_S5_R3.UMI.atria.cor.rm-unfx.fq.gz

Use GNU parallel to run FastQC on fastq array elements

Code
Code: Use GNU parallel to run FastQC on fastq array elements
#!/bin/bash

# fastqs_UMI-dedup/{atria_trim,rcorrector,rcorrector_clean-up,symlinks,umi-tools_extract}

parallel \
    --header : \
    --colsep " " \
    -k \
    -j 1 \
'fastqc \
    --threads {threads} \
    --outdir FastQC/{infile//} \
    {infile}' \
::: threads "${SLURM_CPUS_ON_NODE}" \
::: infile \
    "${fqs_sym_r1[@]}" \
    "${fqs_sym_r2[@]}" \
    "${fqs_UMI_r1[@]}" \
    "${fqs_UMI_r2[@]}" \
    "${fqs_atria_r1[@]}" \
    "${fqs_atria_r2[@]}" \
    "${fqs_rcor_r1[@]}" \
    "${fqs_rcor_r2[@]}" \
    "${fqs_rcor_cor_r1[@]}" \
    "${fqs_rcor_cor_r2[@]}"

Run FastQC on bams

Create arrays of bam files of interest

Code
Code: Create arrays of bam files of interest bams
#!/bin/bash

#  ----------------
unset bams_UT
typeset -a bams_UT
while IFS=" " read -r -d $'\0'; do
    bams_UT+=( "${REPLY}" )
done < <(\
    find "bams_UMI-dedup/aligned_umi-extracted_trimmed" \
        -maxdepth 1 \
        -type f \
        -name "*.bam" \
        -print0 \
            | sort -z \
)
echo_test "${bams_UT[@]}"
echo "${#bams_UT[@]}"


#  ----------------
unset bams_UTK
typeset -a bams_UTK
while IFS=" " read -r -d $'\0'; do
    bams_UTK+=( "${REPLY}" )
done < <(\
    find "bams_UMI-dedup/aligned_umi-extracted_trimmed_kmer-corrected" \
        -maxdepth 1 \
        -type f \
        -name "*.bam" \
        -print0 \
            | sort -z \
)
echo_test "${bams_UTK[@]}"
echo "${#bams_UTK[@]}"


#  ----------------
unset bams_UTK_prim
typeset -a bams_UTK_prim
while IFS=" " read -r -d $'\0'; do
    bams_UTK_prim+=( "${REPLY}" )
done < <(\
    find "bams_UMI-dedup/aligned_UTK_primary" \
        -maxdepth 1 \
        -type f \
        -name "*.bam" \
        -print0 \
            | sort -z \
)
echo_test "${bams_UTK_prim[@]}"
echo "${#bams_UTK_prim[@]}"


#  ----------------
unset bams_UTK_prim_dedup_pos
typeset -a bams_UTK_prim_dedup_pos
while IFS=" " read -r -d $'\0'; do
    bams_UTK_prim_dedup_pos+=( "${REPLY}" )
done < <(\
    find "bams_UMI-dedup/aligned_UTK_primary_dedup-pos" \
        -maxdepth 1 \
        -type f \
        -name "*.bam" \
        -print0 \
            | sort -z \
)
echo_test "${bams_UTK_prim_dedup_pos[@]}"
echo "${#bams_UTK_prim_dedup_pos[@]}"


#  ----------------
unset bams_UTK_prim_dedup_UMI
typeset -a bams_UTK_prim_dedup_UMI
while IFS=" " read -r -d $'\0'; do
    bams_UTK_prim_dedup_UMI+=( "${REPLY}" )
done < <(\
    find "bams_UMI-dedup/aligned_UTK_primary_dedup-UMI" \
        -maxdepth 1 \
        -type f \
        -name "*.bam" \
        -print0 \
            | sort -z \
)
echo_test "${bams_UTK_prim_dedup_UMI[@]}"
echo "${#bams_UTK_prim_dedup_UMI[@]}"


#  ----------------
unset bams_UTK_prim_sec
typeset -a bams_UTK_prim_sec
while IFS=" " read -r -d $'\0'; do
    bams_UTK_prim_sec+=( "${REPLY}" )
done < <(\
    find "bams_UMI-dedup/aligned_UTK_primary-secondary" \
        -maxdepth 1 \
        -type f \
        -name "*.bam" \
        -print0 \
            | sort -z \
)
echo_test "${bams_UTK_prim_sec[@]}"
echo "${#bams_UTK_prim_sec[@]}"


#  ----------------
unset bams_UTK_prim_sec_sans_KL_20S
typeset -a bams_UTK_prim_sec_sans_KL_20S
while IFS=" " read -r -d $'\0'; do
    bams_UTK_prim_sec_sans_KL_20S+=( "${REPLY}" )
done < <(\
    find "bams_UMI-dedup/aligned_UTK_primary-secondary_sans-KL-20S" \
        -maxdepth 1 \
        -type f \
        -name "*.bam" \
        -print0 \
            | sort -z \
)
echo_test "${bams_UTK_prim_sec_sans_KL_20S[@]}"
echo "${#bams_UTK_prim_sec_sans_KL_20S[@]}"


#  ----------------
unset bams_UTK_prim_sec_sans_KL_20S_merged
typeset -a bams_UTK_prim_sec_sans_KL_20S_merged
while IFS=" " read -r -d $'\0'; do
    bams_UTK_prim_sec_sans_KL_20S_merged+=( "${REPLY}" )
done < <(\
    find "bams_UMI-dedup/aligned_UTK_primary-secondary_sans-KL-20S_merged" \
        -maxdepth 1 \
        -type f \
        -name "*.bam" \
        -print0 \
            | sort -z \
)
echo_test "${bams_UTK_prim_sec_sans_KL_20S_merged[@]}"
echo "${#bams_UTK_prim_sec_sans_KL_20S_merged[@]}"


#  ----------------
unset bams_UTK_proper_etc
typeset -a bams_UTK_proper_etc
while IFS=" " read -r -d $'\0'; do
    bams_UTK_proper_etc+=( "${REPLY}" )
done < <(\
    find "bams_UMI-dedup/aligned_UTK_primary-unmapped" \
        -maxdepth 1 \
        -type f \
        -name "*.bam" \
        -print0 \
            | sort -z \
)
echo_test "${bams_UTK_proper_etc[@]}"
echo "${#bams_UTK_proper_etc[@]}"


#  ----------------
unset bams_UTK_proper_etc_SC
typeset -a bams_UTK_proper_etc_SC
while IFS=" " read -r -d $'\0'; do
    bams_UTK_proper_etc_SC+=( "${REPLY}" )
done < <(\
    find "bams_UMI-dedup/aligned_UTK_primary-unmapped_sans-KL-20S" \
        -maxdepth 1 \
        -type f \
        -name "*.bam" \
        -print0 \
            | sort -z \
)
echo_test "${bams_UTK_proper_etc_SC[@]}"
echo "${#bams_UTK_proper_etc_SC[@]}"


#  ----------------
unset bams_UTK_proper_etc_SC_merged
typeset -a bams_UTK_proper_etc_SC_merged
while IFS=" " read -r -d $'\0'; do
    bams_UTK_proper_etc_SC_merged+=( "${REPLY}" )
done < <(\
    find ., "bams_UMI-dedup/aligned_UTK_primary-unmapped_sans-KL-20S_merged" \
        -maxdepth 1 \
        -type f \
        -name "*.bam" \
        -print0 \
            | sort -z \
)
echo_test "${bams_UTK_proper_etc_SC_merged[@]}"
echo "${#bams_UTK_proper_etc_SC_merged[@]}"


#  ----------------
unset bams_UT_prim
typeset -a bams_UT_prim
while IFS=" " read -r -d $'\0'; do
    bams_UT_prim+=( "${REPLY}" )
done < <(\
    find "bams_UMI-dedup/aligned_UT_primary" \
        -maxdepth 1 \
        -type f \
        -name "*.bam" \
        -print0 \
            | sort -z \
)
echo_test "${bams_UT_prim[@]}"
echo "${#bams_UT_prim[@]}"


#  ----------------
unset bams_UT_prim_dedup_pos
typeset -a bams_UT_prim_dedup_pos
while IFS=" " read -r -d $'\0'; do
    bams_UT_prim_dedup_pos+=( "${REPLY}" )
done < <(\
    find "bams_UMI-dedup/aligned_UT_primary_dedup-pos" \
        -maxdepth 1 \
        -type f \
        -name "*.bam" \
        -print0 \
            | sort -z \
)
echo_test "${bams_UT_prim_dedup_pos[@]}"
echo "${#bams_UT_prim_dedup_pos[@]}"


#  ----------------
unset bams_UT_prim_dedup_UMI
typeset -a bams_UT_prim_dedup_UMI
while IFS=" " read -r -d $'\0'; do
    bams_UT_prim_dedup_UMI+=( "${REPLY}" )
done < <(\
    find "bams_UMI-dedup/aligned_UT_primary_dedup-UMI" \
        -maxdepth 1 \
        -type f \
        -name "*.bam" \
        -print0 \
            | sort -z \
)
echo_test "${bams_UT_prim_dedup_UMI[@]}"
echo "${#bams_UT_prim_dedup_UMI[@]}"


#  ----------------
unset fqs_UT
typeset -a fqs_UT
while IFS=" " read -r -d $'\0'; do
    fqs_UT+=( "${REPLY%_R?.fq.gz}" )
done < <(\
    find "bams_UMI-dedup/to-align_umi-extracted_trimmed" \
        -type l \
        -name "*.fq.gz" \
        -print0 \
            | sort -z \
)
echo_test "${fqs_UT[@]}"
echo "${#fqs_UT[@]}"

IFS=" " read -r -a fqs_UT \
    <<< "$(\
        tr ' ' '\n' \
            <<< "${fqs_UT[@]}" \
                | sort -u \
                | tr '\n' ' '\
    )"
echo_test "${fqs_UT[@]}"
echo "${#fqs_UT[@]}"

unset fqs_UT_r1
unset fqs_UT_r2
typeset -a fqs_UT_r1
typeset -a fqs_UT_r2
for i in "${fqs_UT[@]}"; do
    fqs_UT_r1+=("${i}_R1.fq.gz")
    fqs_UT_r2+=("${i}_R3.fq.gz")
done
echo_test "${fqs_UT_r1[@]}"
echo "${#fqs_UT_r1[@]}"
echo_test "${fqs_UT_r2[@]}"
echo "${#fqs_UT_r2[@]}"
# ., bams_UMI-dedup/to-align_umi-extracted_trimmed/5781_G1_IN_UT_R3.fq.gz


#  ----------------
unset fqs_UTK
typeset -a fqs_UTK
while IFS=" " read -r -d $'\0'; do
    fqs_UTK+=( "${REPLY%_R?.fq.gz}" )
done < <(\
    find "bams_UMI-dedup/to-align_umi-extracted_trimmed_kmer-corrected" \
        -type l \
        -name "*.fq.gz" \
        -print0 \
            | sort -z \
)
echo_test "${fqs_UTK[@]}"
echo "${#fqs_UTK[@]}"

IFS=" " read -r -a fqs_UTK \
    <<< "$(\
        tr ' ' '\n' \
            <<< "${fqs_UTK[@]}" \
                | sort -u \
                | tr '\n' ' '\
    )"
echo_test "${fqs_UTK[@]}"
echo "${#fqs_UTK[@]}"

unset fqs_UTK_r1
unset fqs_UTK_r2
typeset -a fqs_UTK_r1
typeset -a fqs_UTK_r2
for i in "${fqs_UTK[@]}"; do
    fqs_UTK_r1+=("${i}_R1.fq.gz")
    fqs_UTK_r2+=("${i}_R3.fq.gz")
done
echo_test "${fqs_UTK_r1[@]}"
echo "${#fqs_UTK_r1[@]}"
echo_test "${fqs_UTK_r2[@]}"
echo "${#fqs_UTK_r2[@]}"
# ., bams_UMI-dedup/to-align_umi-extracted_trimmed_kmer-corrected/5781_G1_IN_UTK_R3.fq.gz


#  ----------------
unset fqs_UTK_prim_sec_SC
typeset -a fqs_UTK_prim_sec_SC
while IFS=" " read -r -d $'\0'; do
    fqs_UTK_prim_sec_SC+=( "${REPLY%.?.fq.gz}" )
done < <(\
    find "bams_UMI-dedup/aligned_UTK_primary-secondary_sans-KL-20S_bam-to-fastq" \
        -type f \
        -name "*.fq.gz" \
        -print0 \
            | sort -z \
)
echo_test "${fqs_UTK_prim_sec_SC[@]}"
echo "${#fqs_UTK_prim_sec_SC[@]}"

IFS=" " read -r -a fqs_UTK_prim_sec_SC \
    <<< "$(\
        tr ' ' '\n' \
            <<< "${fqs_UTK_prim_sec_SC[@]}" \
                | sort -u \
                | tr '\n' ' '\
    )"
echo_test "${fqs_UTK_prim_sec_SC[@]}"
echo "${#fqs_UTK_prim_sec_SC[@]}"

unset fqs_UTK_prim_sec_SC_r1
unset fqs_UTK_prim_sec_SC_r2
typeset -a fqs_UTK_prim_sec_SC_r1
typeset -a fqs_UTK_prim_sec_SC_r2
for i in "${fqs_UTK_prim_sec_SC[@]}"; do
    fqs_UTK_prim_sec_SC_r1+=("${i}.1.fq.gz")
    fqs_UTK_prim_sec_SC_r2+=("${i}.2.fq.gz")
done
echo_test "${fqs_UTK_prim_sec_SC_r1[@]}"
echo "${#fqs_UTK_prim_sec_SC_r1[@]}"
echo_test "${fqs_UTK_prim_sec_SC_r2[@]}"
echo "${#fqs_UTK_prim_sec_SC_r2[@]}"
# ., bams_UMI-dedup/aligned_UTK_primary-secondary_sans-KL-20S_bam-to-fastq/5781_G1_IN_UTK.primary-secondary.SC.2.fq.gz


#  ----------------
unset fqs_UTK_prim_sec_SC_merged
typeset -a fqs_UTK_prim_sec_SC_merged
while IFS=" " read -r -d $'\0'; do
    fqs_UTK_prim_sec_SC_merged+=( "${REPLY%.?.fq.gz}" )
done < <(\
    find "bams_UMI-dedup/aligned_UTK_primary-secondary_sans-KL-20S_merged_bam-to-fastq" \
        -type f \
        -name "*.fq.gz" \
        -print0 \
            | sort -z \
)
echo_test "${fqs_UTK_prim_sec_SC_merged[@]}"
echo "${#fqs_UTK_prim_sec_SC_merged[@]}"

IFS=" " read -r -a fqs_UTK_prim_sec_SC_merged \
    <<< "$(\
        tr ' ' '\n' \
            <<< "${fqs_UTK_prim_sec_SC_merged[@]}" \
                | sort -u \
                | tr '\n' ' '\
    )"
echo_test "${fqs_UTK_prim_sec_SC_merged[@]}"
echo "${#fqs_UTK_prim_sec_SC_merged[@]}"

unset fqs_UTK_prim_sec_SC_merged_r1
unset fqs_UTK_prim_sec_SC_merged_r2
typeset -a fqs_UTK_prim_sec_SC_merged_r1
typeset -a fqs_UTK_prim_sec_SC_merged_r2
for i in "${fqs_UTK_prim_sec_SC_merged[@]}"; do
    fqs_UTK_prim_sec_SC_merged_r1+=("${i}.1.fq.gz")
    fqs_UTK_prim_sec_SC_merged_r2+=("${i}.2.fq.gz")
done
echo_test "${fqs_UTK_prim_sec_SC_merged_r1[@]}"
echo "${#fqs_UTK_prim_sec_SC_merged_r1[@]}"
echo_test "${fqs_UTK_prim_sec_SC_merged_r2[@]}"
echo "${#fqs_UTK_prim_sec_SC_merged_r2[@]}"
# ., bams_UMI-dedup/aligned_UTK_primary-secondary_sans-KL-20S_merged_bam-to-fastq/merged_G1_IN_UTK.primary-secondary.SC.2.fq.gz


#  ----------------
unset fqs_UTK_prop_SC
typeset -a fqs_UTK_prop_SC
while IFS=" " read -r -d $'\0'; do
    fqs_UTK_prop_SC+=( "${REPLY%.?.fq.gz}" )
done < <(\
    find "bams_UMI-dedup/aligned_UTK_primary-unmapped_sans-KL-20S_bam-to-fastq" \
        -type f \
        -name "*.fq.gz" \
        -print0 \
            | sort -z \
)
echo_test "${fqs_UTK_prop_SC[@]}"
echo "${#fqs_UTK_prop_SC[@]}"

IFS=" " read -r -a fqs_UTK_prop_SC \
    <<< "$(\
        tr ' ' '\n' \
            <<< "${fqs_UTK_prop_SC[@]}" \
                | sort -u \
                | tr '\n' ' '\
    )"
echo_test "${fqs_UTK_prop_SC[@]}"
echo "${#fqs_UTK_prop_SC[@]}"

unset fqs_UTK_prop_SC_r1
unset fqs_UTK_prop_SC_r2
typeset -a fqs_UTK_prop_SC_r1
typeset -a fqs_UTK_prop_SC_r2
for i in "${fqs_UTK_prop_SC[@]}"; do
    fqs_UTK_prop_SC_r1+=("${i}.1.fq.gz")
    fqs_UTK_prop_SC_r2+=("${i}.2.fq.gz")
done
echo_test "${fqs_UTK_prop_SC_r1[@]}"
echo "${#fqs_UTK_prop_SC_r1[@]}"
echo_test "${fqs_UTK_prop_SC_r2[@]}"
echo "${#fqs_UTK_prop_SC_r2[@]}"
# ., bams_UMI-dedup/aligned_UTK_primary-unmapped_sans-KL-20S_bam-to-fastq/5781_G1_IN_UTK.proper-etc.SC.2.fq.gz


#  ----------------
unset fqs_UTK_prop_SC_merged
typeset -a fqs_UTK_prop_SC_merged
while IFS=" " read -r -d $'\0'; do
    fqs_UTK_prop_SC_merged+=( "${REPLY%.?.fq.gz}" )
done < <(\
    find "bams_UMI-dedup/aligned_UTK_primary-unmapped_sans-KL-20S_merged_bam-to-fastq" \
        -type f \
        -name "*.fq.gz" \
        -print0 \
            | sort -z \
)
echo_test "${fqs_UTK_prop_SC_merged[@]}"
echo "${#fqs_UTK_prop_SC_merged[@]}"

IFS=" " read -r -a fqs_UTK_prop_SC_merged \
    <<< "$(\
        tr ' ' '\n' \
            <<< "${fqs_UTK_prop_SC_merged[@]}" \
                | sort -u \
                | tr '\n' ' '\
    )"
echo_test "${fqs_UTK_prop_SC_merged[@]}"
echo "${#fqs_UTK_prop_SC_merged[@]}"

unset fqs_UTK_prop_SC_merged_r1
unset fqs_UTK_prop_SC_merged_r2
typeset -a fqs_UTK_prop_SC_merged_r1
typeset -a fqs_UTK_prop_SC_merged_r2
for i in "${fqs_UTK_prop_SC_merged[@]}"; do
    fqs_UTK_prop_SC_merged_r1+=("${i}.1.fq.gz")
    fqs_UTK_prop_SC_merged_r2+=("${i}.2.fq.gz")
done
echo_test "${fqs_UTK_prop_SC_merged_r1[@]}"
echo "${#fqs_UTK_prop_SC_merged_r1[@]}"
echo_test "${fqs_UTK_prop_SC_merged_r2[@]}"
echo "${#fqs_UTK_prop_SC_merged_r2[@]}"
# ., bams_UMI-dedup/aligned_UTK_primary-unmapped_sans-KL-20S_merged_bam-to-fastq/merged_G1_IN_UTK.proper-etc.SC.2.fq.gz

Use GNU parallel to run FastQC on bam array elements

Code
Code: Use GNU parallel to run FastQC on bam array elements
#!/bin/bash

parallel \
    --header : \
    --colsep " " \
    -k \
    -j 1 \
'fastqc \
    --threads {threads} \
    --outdir FastQC/{infile//} \
    {infile}' \
::: threads "${SLURM_CPUS_ON_NODE}" \
::: infile \
    "${bams_UT[@]}" \
    "${bams_UTK[@]}" \
    "${bams_UTK_prim[@]}" \
    "${bams_UTK_prim_dedup_pos[@]}" \
    "${bams_UTK_prim_dedup_UMI[@]}" \
    "${bams_UTK_prim_sec[@]}" \
    "${bams_UTK_prim_sec_sans_KL_20S[@]}" \
    "${bams_UTK_prim_sec_sans_KL_20S_merged[@]}" \
    "${bams_UTK_proper_etc[@]}" \
    "${bams_UTK_proper_etc_SC[@]}" \
    "${bams_UTK_proper_etc_SC_merged[@]}" \
    "${bams_UT_prim[@]}" \
    "${bams_UT_prim_dedup_pos[@]}" \
    "${bams_UT_prim_dedup_UMI[@]}" \
    "${fqs_UT_r1[@]}" \
    "${fqs_UT_r2[@]}" \
    "${fqs_UTK_r1[@]}" \
    "${fqs_UTK_r2[@]}" \
    "${fqs_UTK_prim_sec_SC_r1[@]}" \
    "${fqs_UTK_prim_sec_SC_r2[@]}" \
    "${fqs_UTK_prim_sec_SC_merged_r1[@]}" \
    "${fqs_UTK_prim_sec_SC_merged_r2[@]}" \
    "${fqs_UTK_prop_SC_r1[@]}" \
    "${fqs_UTK_prop_SC_r2[@]}" \
    "${fqs_UTK_prop_SC_merged_r1[@]}" \
    "${fqs_UTK_prop_SC_merged_r2[@]}"


Run MultiQC

Code

Code: Run MultiQC
#!/bin/bash

mkdir -p MultiQC/fastqs_UMI-dedup/symlinks

multiqc \
    --interactive \
    -o MultiQC/fastqs_UMI-dedup/symlinks \
	FastQC/fastqs_UMI-dedup/symlinks