質控腳本來嘍

好久不更新,上個硬貨。腳本需提前準備宿主和rrna的bowtie2索引文件,原始數據的命名方式為{sample}_raw_1/2.fq.gz,保存有原始數據路徑的文件,保存樣品列表的文件。

最后打個廣告,歡迎畜牧學方向的研究生報考蘭州大學。

#!/bin/bash
# 腳本功能:二代測序數據質控、去rRNA與去宿主序列處理
#版本1.2,新增了--rrna功能
usage() {echo "用法: $0 [--host <宿主類型>] [--rrna] <路徑文件> <樣品名列表文件>"exit 1
}# ---------- 配置路徑 ----------
declare -A HOST_INDEX=([sheep]="/mnt/data/database/bowtie/sheep/sheepgenome"[goat]="/mnt/data/database/bowtie/goat/goatgenome"[cattle]="/mnt/data/database/bowtie/cattle/cattlegenome"
)
SSU_INDEX="/mnt/data/database/bowtie/SSU/SSU"
LSU_INDEX="/mnt/data/database/bowtie/LSU/LSU"# 初始化變量
HOST=""
REMOVE_RRNA=false
INPUT_FILE=""
SAMPLE_LIST=""
# 增強參數解析
while [[ $# -gt 0 ]]; docase "$1" in--host)# 宿主類型驗證if [[ ! " sheep goat cattle " =~ " $2 " ]]; thenecho "錯誤:無效宿主類型 '$2',可選: sheep/goat/cattle"exit 1fiHOST="$2"shift 2 ;;--rrna)REMOVE_RRNA=trueshift ;;--help)usage ;;-*)echo "錯誤:未知選項 $1"usage ;;*)# 位置參數處理if [[ -z $INPUT_FILE ]]; thenINPUT_FILE="$1"elif [[ -z $SAMPLE_LIST ]]; thenSAMPLE_LIST="$1"elseecho "錯誤:多余參數 $1"usagefishift ;;esac
done# 驗證必要參數
if [[ -z $INPUT_FILE || -z $SAMPLE_LIST ]]; thenecho "錯誤:缺失必要參數!"usage
fi# 讀取原始路徑并驗證
INPUT_DIR=$(cat "$INPUT_FILE")
if [[ ! -d $INPUT_DIR ]]; thenecho "錯誤:路徑文件中的目錄 $INPUT_DIR 不存在"exit 1
fi# 宿主索引驗證
if [[ -n $HOST ]]; thenINDEX="${HOST_INDEX[$HOST]}"if [[ ! -f "${INDEX}.1.bt2" ]]; thenecho "錯誤:宿主索引文件 ${INDEX}.1.bt2 不存在"exit 1fi
fi# ---------- 目錄創建 ----------
CLEAN_DIR=$(dirname "$INPUT_DIR")/cleandata
mkdir -p "$CLEAN_DIR" || { echo "錯誤:無法創建目錄 $CLEAN_DIR"; exit 1; }# ---------- 處理流程 ----------
process_sample() {local sample=$1local raw_1="${INPUT_DIR}/${sample}_raw_1.fq.gz"local raw_2="${INPUT_DIR}/${sample}_raw_2.fq.gz"local clip_1="${CLEAN_DIR}/${sample}.clip.1.fq.gz"local clip_2="${CLEAN_DIR}/${sample}.clip.2.fq.gz"# Step 1: 質控(fastp默認參數)echo "[$(date)] 處理樣品 $sample:質控中..."fastp -i "$raw_1" -I "$raw_2" -o "$clip_1" -O "$clip_2" || {echo "錯誤:fastp處理失敗!"exit 1}#Step 2: 去宿主if [[ -n $HOST ]]; thenecho "[$(date)] 去除宿主 $HOST 序列..."bowtie2 -p 192 -x "$INDEX" --quiet\-1 "$clip_1" -2 "$clip_2" \--un-conc-gz "${CLEAN_DIR}/${sample}.clean.fq.gz" \--al-conc-gz "${CLEAN_DIR}/${sample}.host.fq.gz" \-S /dev/null > "${CLEAN_DIR}/${sample}.bowtie2.log" || exit 1mv "${CLEAN_DIR}/${sample}.clean.fq.1.gz" "$clip_1"mv "${CLEAN_DIR}/${sample}.clean.fq.2.gz" "$clip_2"fi#Step 3: 去rRNAif $REMOVE_RRNA; thenecho "[$(date)] 去除rRNA序列(SSU+LSU)..."# SSU過濾bowtie2 -p 192 -x "$SSU_INDEX" --quiet\-1 "$clip_1" -2 "$clip_2" \--un-conc-gz "${CLEAN_DIR}/${sample}.clean.fq.gz" \--al-conc-gz "${CLEAN_DIR}/${sample}.SSU.fq.gz" \-S /dev/null > "${CLEAN_DIR}/${sample}.SSU.log" || exit 1mv "${CLEAN_DIR}/${sample}.clean.fq.1.gz" "$clip_1"mv "${CLEAN_DIR}/${sample}.clean.fq.2.gz" "$clip_2"# LSU過濾bowtie2 -p 192 -x "$LSU_INDEX" --quiet\-1 "$clip_1" -2 "$clip_2" \--un-conc-gz "${CLEAN_DIR}/${sample}.clean.fq.gz" \--al-conc-gz "${CLEAN_DIR}/${sample}.LSU.fq.gz" \-S /dev/null > "${CLEAN_DIR}/${sample}.LSU.log" || exit 1mv "${CLEAN_DIR}/${sample}.clean.fq.1.gz" "$clip_1"mv "${CLEAN_DIR}/${sample}.clean.fq.2.gz" "$clip_2"fi}# 遍歷樣品列表
while IFS= read -r sample; do[[ -z $sample ]] && continue  # 跳過空行process_sample "$sample"
done < "$SAMPLE_LIST"mkdir ${CLEAN_DIR}/host ${CLEAN_DIR}/rRNA ${CLEAN_DIR}/log
mv ${CLEAN_DIR}/*host\.fq* ${CLEAN_DIR}/host/
mv ${CLEAN_DIR}/*SU\.fq* ${CLEAN_DIR}/rRNA/
mv ${CLEAN_DIR}/*log ${CLEAN_DIR}/log
echo "[$(date)] 處理完成!結果保存至:$CLEAN_DIR"

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/80051.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/80051.shtml
英文地址,請注明出處:http://en.pswp.cn/web/80051.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux Bash | Capture Output / Recall

注&#xff1a;本文為 “Linux Bash | Capture Output / Recall” 相關文章合輯。 英文引文&#xff0c;機翻未校。 中文引文&#xff0c;略作重排。 Automatically Capture Output of the Last Command Into a Variable Using Bash 使用 Bash自動將最后一個命令的輸出捕獲到…

編程題 03-樹2 List Leaves【PAT】

文章目錄 題目輸入格式輸出格式輸入樣例輸出樣例 題解解題思路完整代碼 編程練習題目集目錄 題目 Given a tree, you are supposed to list all the leaves in the order of top down, and left to right. 輸入格式 Each input file contains one test case. For each case, …

QT設置MySQL驅動

QSqlDatabase: QMYSQL driver not loaded QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7 第一步&#xff1a;下載MySQL https://dev.mysql.com/downloads/mysql/ 解壓縮下載的安裝包&#xff0c;其目錄結構如下所示&#xff1a; 第二…

ABP User Interface-Angular UI中文詳解

本系列文章主要用于對ABP User Interface-Angular UI &#xff08;Angular UI | ABP.IO Documentation&#xff09;不分的中文講解以及記錄自己在學習過程中發現的容易出錯的地方。 1. 開發Development 2. 核心功能Core Functions 3. 通用組件Utilities 4. 自定義Customiza…

常用負載均衡技術有哪些?不同網絡層面上的網絡負載均衡技術

前言 負載均衡是一種策略&#xff0c;它能讓多臺服務器或多條鏈路共同承擔一些繁重的計算或I/O任務&#xff0c;從而以較低成本消除網絡瓶頸&#xff0c;提高網絡的靈活性和可靠性。 在系統管理員發現網絡性能不好時&#xff0c;可以通過網絡負載均衡來分配資源&#xff0c;以…

ARMV8 RK3399 u-boot TPL啟動流程分析 --crt0.S

上一篇介紹到start.S 最后一個指令是跳轉到_main, 接下來分析 __main 都做了什么 arch/arm/lib/crt0.S __main 注釋寫的很詳細&#xff0c;主要分為5步 1. 準備board_init_f的運行環境 2. 跳轉到board_init_f 3. 設置broad_init_f 申請的stack 和 GD 4. 完整u-boot 執行re…

RabbitMQ--進階篇

RabbitMQ 客戶端整合Spring Boot 添加相關的依賴 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId> </dependency> 編寫配置文件&#xff0c;配置RabbitMQ的服務信息 spri…

Redis--基礎知識點--27--redis緩存分類樹

在 Redis 中存儲分類樹&#xff0c;通常需要選擇合適的數據結構來表現層級關系。以下是使用 字符串&#xff08;String&#xff09; 和 哈希&#xff08;Hash&#xff09; 兩種常見方案的舉例說明&#xff0c;結合電商分類場景&#xff08;如 電子產品 > 手機 > 智能手機…

【C++】匯編角度分析棧攻擊

棧攻擊 介紹原理示例代碼匯編分析 介紹原理 核心原理是通過 緩沖區溢出&#xff08;Buffer Overflow&#xff09; 等漏洞&#xff0c;覆蓋棧上的關鍵數據&#xff08;如返回地址、函數指針&#xff09;&#xff0c;從而改變程序執行流程&#xff1b; 在 C 中&#xff0c;每個…

訪問 Docker 官方鏡像源(包括代理)全部被“重置連接”或超時

華為云輕量應用服務器&#xff08;Ubuntu 系統&#xff09; 遇到的問題是&#xff1a; &#x1f512; 訪問 Docker 官方鏡像源&#xff08;包括代理&#xff09;全部被“重置連接”或超時了&#xff0c;說明你這臺服務器的出境網絡對這些國外域名限制很嚴格&#xff0c;常見于華…

Java語言

本文來源 &#xff1a; 騰訊元寶 Java是一種面向對象、跨平臺的高級編程語言&#xff0c;最初由Sun Microsystems&#xff08;現為Oracle公司所有&#xff09;于1995年推出&#xff0c;廣泛應用于Web開發、移動應用、大數據處理、嵌入式系統等領域。以下是其核心特點和應用概述…

無償幫寫畢業論文(看不懂的可以私信博主)

以下教程教你如何利用相關網站和AI免費幫你寫一個畢業論文。畢竟畢業論文只要過就行&#xff0c;脫產學習這么多年&#xff0c;終于熬出頭了&#xff0c;完成畢設后有空就去多看看親人好友&#xff0c;祝好&#xff01; 一、找一個論文模板 廢話不多說&#xff0c;先上干貨Ov…

python打卡day26

函數、參數、變量 知識點回顧&#xff1a; 函數的定義變量作用域&#xff1a;局部變量和全局變量函數的參數類型&#xff1a;位置參數、默認參數、不定參數傳遞參數的手段&#xff1a;關鍵詞參數傳遞參數的順序&#xff1a;同時出現三種參數類型時 def function_name(parameter…

LeetCode 熱題 100 437. 路徑總和 III

LeetCode 熱題 100 | 437. 路徑總和 III 大家好&#xff0c;今天我們來解決一道經典的二叉樹問題——路徑總和 III。這道題在 LeetCode 上被標記為中等難度&#xff0c;要求計算二叉樹中節點值之和等于給定目標值 targetSum 的路徑數目。 問題描述 給定一個二叉樹的根節點 ro…

vue3學習-局部使用vue框架案例

目錄 局部使用vue框架步驟 簡單案例1 簡單案例2【 結構化賦值語法】 簡單案例3【使用模塊化開發模式】 基本數據的簡單應用&#xff0c;對象的簡單應用 數組的簡單應用 局部使用vue框架步驟 1 引用 vue框架的核心文件和 涉及ES6語法的文件 注意&#xff1a;這里文件&am…

初識Linux · IP分片

目錄 前言&#xff1a; IP分片 分片vs不分片 如何分片 分片舉例 三個字段 前言&#xff1a; 前文IP協議上和IP協議下我們已經把IP協議的報頭的大多數字段介紹了&#xff0c;唯獨有三個字段現在還有介紹&#xff0c;即16位標識&#xff0c;8位協議&#xff0c;13位片偏移…

u3d 定義列表詳細過程

層級結構 - Canvas - Scroll View - Viewport - Content (Vertical Layout Group) - Item1 (Prefab) - Item2 (Prefab) ... 詳細設置步驟 1. 創建 Canvas 2. 添加 Scroll View 組件 3. 在 Scroll View 下創建 Content 子對象 4. 添加 …

產品方法論與 AI Agent 技術的深度融合:從決策智能到價值創造

一、引言&#xff1a;智能化時代的產品范式革命 在數字化轉型的深水區&#xff0c;產品開發正經歷著從 “功能定義” 到 “體驗設計” 再到 “智能演化” 的范式躍遷。麥肯錫 2024 年報告指出&#xff0c;采用 AI 驅動產品方法論的企業&#xff0c;新品研發周期平均縮短 40%&a…

力扣.1471數組的k個最強值,力扣.1471數組的k個最強值力扣1576.替換所有的問號力扣1419.數青蛙?編輯力扣300.最長遞增子序列

目錄 力扣.1471數組的k個最強值 力扣1576.替換所有的問號 力扣1419.數青蛙?編輯 力扣300.最長遞增子序列 力扣.1471數組的k個最強值 class Solution {public static int[] getStrongest(int[] arr,int k) {if(karr.length){return arr;}int []retnew int[k];int narr.lengt…

使用docker安裝clickhouse集群

1、簡介 clickhouse 作為大數據場景中&#xff0c;實現快速檢索的常用列式存儲數據庫&#xff0c;采用物理機部署&#xff0c;會在數據量大的場景中&#xff0c;物理機器存儲達到閾值需要擴容&#xff0c;會帶來比較大的問題&#xff0c;因此&#xff0c;使用docker部署clickho…