质控脚本来喽

好久不更新,上个硬货。脚本需提前准备宿主和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.mzph.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…