sort命令_sort -t命令(1)

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

[root@iZwz9bhan5nqzh979qokrkZ ~]# cat a.txt
root❌0:0:root:/root:/bin/bash
bin❌1:1:bin:/bin:/sbin/nologin
daemon❌2:2:daemon:/sbin:/sbin/nologin
root❌0:0:root:/root:/bin/bash
bin❌1:1:bin:/bin:/sbin/nologin
daemon❌2:2:daemon:/sbin:/sbin/nologin

实例一:去掉重复的行
[root@iZwz9bhan5nqzh979qokrkZ ~]# sort -u a.txt
bin❌1:1:bin:/bin:/sbin/nologin
daemon❌2:2:daemon:/sbin:/sbin/nologin
root❌0:0:root:/root:/bin/bash
注:sort的-u选项它的作用很简单,就是在输出行中去除重复行。

实例二:sort的-n、-r、-k、-t选项的使用

[root@iZwz9bhan5nqzh979qokrkZ ~]# sort -t “:” -k 3 a.txt
root❌0:0:root:/root:/bin/bash
root❌0:0:root:/root:/bin/bash
bin❌1:1:bin:/bin:/sbin/nologin
bin❌1:1:bin:/bin:/sbin/nologin
daemon❌2:2:daemon:/sbin:/sbin/nologin
daemon❌2:2:daemon:/sbin:/sbin/nologin
注:以":"为分割符的第三列排序,默认从小往大

[root@iZwz9bhan5nqzh979qokrkZ ~]# sort -t “:” -k 3 -r a.txt
daemon❌2:2:daemon:/sbin:/sbin/nologin
daemon❌2:2:daemon:/sbin:/sbin/nologin
bin❌1:1:bin:/bin:/sbin/nologin
bin❌1:1:bin:/bin:/sbin/nologin
root❌0:0:root:/root:/bin/bash
root❌0:0:root:/root:/bin/bash
注:以":"为分割符的第三列排序,从大往小。-r:取反

[root@iZwz9bhan5nqzh979qokrkZ ~]# sort -t “:” -k 3 -n a.txt
root❌0:0:root:/root:/bin/bash
root❌0:0:root:/root:/bin/bash
bin❌1:1:bin:/bin:/sbin/nologin
bin❌1:1:bin:/bin:/sbin/nologin
daemon❌2:2:daemon:/sbin:/sbin/nologin
daemon❌2:2:daemon:/sbin:/sbin/nologin
注:-n:按数值大小排序,默认从小往大。

[root@iZwz9bhan5nqzh979qokrkZ ~]# cat a.txt | sort -t “:” -k 1.2 -r
root❌0:0:root:/root:/bin/bash
root❌0:0:root:/root:/bin/bash
bin❌1:1:bin:/bin:/sbin/nologin
bin❌1:1:bin:/bin:/sbin/nologin
daemon❌2:2:daemon:/sbin:/sbin/nologin
daemon❌2:2:daemon:/sbin:/sbin/nologin
注:以":"为分隔符,以第一列的第二个字符排序,默认从前往后,从小到大。

补充:
cat a.txt | sort -t ‘’:‘’ -k 2 以分割符的第2列顺序排序
cat a.txt | sort -t “:” -k 1.2 以分割符的第一列的第2个字符排序
cat a.txt | sort -t “:” -k 1.2 -r 以分割符的第一列的第2个字符倒序排序 replace
cat a.txt | sort -n 按数值排序
cat b.txt | sort -t ": " -k 1.2 -n 以分割符的第1列的第2个字符的数值大小排序

实例三:把排序结果输出到原文件中,用重定向可就不行了
[root@iZwz9bhan5nqzh979qokrkZ ~]# sort -nr b.txt
86
79
46
33
20
13
12
11
09
[root@iZwz9bhan5nqzh979qokrkZ ~]# sort -nr b.txt -o b.txt
[root@iZwz9bhan5nqzh979qokrkZ ~]# cat b.txt
86
79
46
33
20
13
12
11
09

最全的Linux教程,Linux从入门到精通

======================

  1. linux从入门到精通(第2版)

  2. Linux系统移植

  3. Linux驱动开发入门与实战

  4. LINUX 系统移植 第2版

  5. Linux开源网络全栈详解 从DPDK到OpenFlow

华为18级工程师呕心沥血撰写3000页Linux学习笔记教程

第一份《Linux从入门到精通》466页

====================

内容简介

====

本书是获得了很多读者好评的Linux经典畅销书**《Linux从入门到精通》的第2版**。本书第1版出版后曾经多次印刷,并被51CTO读书频道评为“最受读者喜爱的原创IT技术图书奖”。本书第﹖版以最新的Ubuntu 12.04为版本,循序渐进地向读者介绍了Linux 的基础应用、系统管理、网络应用、娱乐和办公、程序开发、服务器配置、系统安全等。本书附带1张光盘,内容为本书配套多媒体教学视频。另外,本书还为读者提供了大量的Linux学习资料和Ubuntu安装镜像文件,供读者免费下载。

华为18级工程师呕心沥血撰写3000页Linux学习笔记教程

本书适合广大Linux初中级用户、开源软件爱好者和大专院校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。

需要《Linux入门到精通》、《linux系统移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

<think>好的,我现在需要帮助用户解决他们在转录组分析Bash脚本中的问题,特别是使用StringTie进行定量分析时遇到的错误。用户提到了样本列表处理、路径引用、日志记录和表达矩阵合并这几个具体问题。我需要一步步分析可能的问题点,并提出优化建议。 首先,样本列表处理可能涉及到如何正确读取样本名,可能存在路径错误或者循环处理样本时的格式问题。比如,用户可能在循环中错误地引用了样本文件,或者样本列表文件格式不正确,导致脚本找不到对应的样本。这时候需要检查样本列表的生成方式,确保每一行正确对应一个样本名,并且在循环中正确拼接路径。 接下来是路径引用问题。用户可能在脚本中使用了硬编码的路径,或者相对路径没有正确处理,导致脚本在不同环境下运行时找不到文件。建议使用配置变量来定义路径,并且使用绝对路径,或者确保相对路径的正确性。同时,检查文件是否存在,比如在关键步骤前添加`if [ ! -f "$file" ]; then`这样的判断,避免因为文件缺失导致后续步骤出错。 日志记录方面,用户可能没有正确记录每个步骤的输出和错误信息,导致调试困难。可以在每个命令后添加重定向,将stdout和stderr输出到日志文件,比如`>> $LOG_FILE 2>&1`。同时,可以考虑使用`set -e`让脚本在遇到错误时立即退出,或者使用`trap`命令捕获错误信号,记录更多信息。 表达矩阵合并部分,StringTie的merge步骤可能需要正确的GTF文件列表,或者样本处理顺序问题。需要确保所有样本的GTF文件已经正确生成,并且在合并时使用正确的参数。此外,在合并后生成表达矩阵时,可能需要使用`stringtie_expression_matrix.pl`脚本,这个脚本是否正确安装和调用也是需要检查的点。 优化方面,可以考虑并行处理样本以加快速度,比如使用GNU parallel或者后台进程。同时,添加参数校验和错误处理,比如检查输入文件是否存在,必要的软件是否安装。函数化代码可以增加可读性,比如将样本处理、合并等步骤写成函数。配置文件的使用可以让脚本更灵活,方便不同项目调整参数。 在代码示例中,需要注意正确引用变量,使用双引号避免空格问题,比如`"$SAMPLE_DIR/${sample}_clean.fq"`。同时,日志文件的时间戳可以避免覆盖,方便追踪每次运行的情况。合并后的表达矩阵可能需要进一步的质量控制,比如使用FastQC检查数据质量,如引用[1]中提到的质量分析步骤。 最后,相关问题需要覆盖用户可能遇到的后续问题,比如性能优化、其他差异分析工具、质量控制方法等,这样用户可以有进一步的参考。</think>以下是为您设计的转录组分析脚本优化方案,重点解决样本列表处理、路径引用、日志记录和表达矩阵合并问题: ### 一、核心问题解决方案 1. **样本列表处理优化** ```bash # 使用awk严格提取第九列,添加格式校验 awk 'BEGIN{FS=OFS="\t"} NR>1 && NF>=9 {print $9}' sample_info.txt > sample_list \ || { echo "样本列表提取失败"; exit 1; } # 添加样本存在性检查 while read sample; do if [ ! -f "$SAMPLE_DIR/${sample}_clean.fq" ]; then echo "[ERROR] 样本文件缺失: ${sample}" >> $LOG_FILE exit 1 fi done < sample_list ``` 2. **路径引用规范化** ```bash # 使用绝对路径基础配置 BASE_DIR="/data/rnaseq/project1" REF_GENOME="$BASE_DIR/reference/hg38.fa" LOG_DIR="$BASE_DIR/log/$(date +%Y%m%d)" mkdir -p $LOG_DIR ``` 3. **增强型日志记录** ```bash exec 3>&1 4>&2 trap 'exec 2>&4 1>&3; echo "Error at line $LINENO" >> $LOG_FILE' ERR exec > >(tee -a "$LOG_FILE") 2>&1 # 记录关键参数 echo "=== 分析参数 ===" echo "参考基因组: $REF_GENOME" echo "样本数量: $(wc -l < sample_list)" ``` 4. **矩阵合并可靠性提升** ```bash # 分步合并策略 stringtie --merge -G $GTF -o merged.gtf gtf_list.txt || { echo "[ERROR] GTF合并失败" >> $LOG_ERROR exit 1 } # 添加矩阵校验 python3 stringtie_expression_matrix.py \ -i ballgown/ \ -g merged.gtf \ -o gene_count_matrix.csv \ && csvtool check gene_count_matrix.csv ``` ### 二、完整优化脚本框架 ```bash #!/bin/bash set -eo pipefail # 配置区 CONFIG_FILE="analysis_config.cfg" source "$CONFIG_FILE" # 初始化日志 TIMESTAMP=$(date +%Y%m%d_%H%M%S) LOG_FILE="${LOG_DIR}/pipeline_${TIMESTAMP}.log" ERROR_FILE="${LOG_DIR}/errors_${TIMESTAMP}.log" # 函数化处理流程 process_sample() { local sample=$1 hisat2 -x $HISAT2_INDEX \ -U "${RAW_DATA_DIR}/${sample}.fastq" \ | samtools sort -@ 4 -o "${BAM_DIR}/${sample}.sorted.bam" stringtie "${BAM_DIR}/${sample}.sorted.bam" \ -G $REF_GTF \ -o "${BALLGOWN_DIR}/${sample}/${sample}.gtf" \ -A "${GENE_ABUND_DIR}/${sample}.tsv" } export -f process_sample # 主流程 parallel -j 4 --progress --joblog $LOG_FILE process_sample :::: sample_list # 合并表达矩阵 stringtie --merge -p 8 -G $REF_GTF -o merged_transcripts.gtf gtf_list.txt prepDE.py -i ballgown/ -g gene_count_matrix.csv -t transcript_count_matrix.csv # 质量检查 if [ $(wc -l < gene_count_matrix.csv) -lt 10000 ]; then echo "警告:基因表达矩阵异常" | mail -s "分析警报" admin@lab.com fi ``` ### 三、关键改进说明 1. **错误处理机制**: - 使用`set -eo pipefail`立即捕获错误[^1] - 采用`trap`命令记录错误位置 - 关键步骤添加返回状态检查 2. **性能优化**: ```bash # 并行处理样本(GNU Parallel) parallel -j $THREADS process_sample :::: sample_list ``` - 根据服务器CPU核心数动态调整线程 - 内存使用监控模块 3. **可维护性提升**: - 参数配置文件分离(analysis_config.cfg) ```ini # 示例配置文件 REF_GENOME="/data/reference/hg38.fa" HISAT2_INDEX="/data/index/hisat2/hg38" THREADS=8 ``` ### 四、验证方法 ```bash # 运行静态检查 shellcheck optimized_script.sh # 执行空运行测试 bash -n optimized_script.sh # 生成流程示意图 echo "流程图生成中..." cat optimized_script.sh | grep -E '^# (配置|初始化|流程)' | graph-easy > pipeline_flow.txt ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值