You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shell脚本变量带末尾换行导致Trimmomatic路径拼接错误如何解决

问题根因

变量末尾携带异常换行符的核心原因是Samples_prefix.txt使用了Windows系统的CRLF换行格式(行尾为\r\n),Linux环境下Shell按LF(\n)拆分读取行时,会把每行末尾的\r回车符残留在读取到的变量值中,后续拼接文件名时就会出现后缀被挤到新行、路径无效的问题。如果文件末尾存在无换行的最后一行、空行,也可能触发读取异常。

修复方法
  1. 优先从源文件处理,执行以下命令将输入文件转为Unix换行格式,清除所有行尾多余的回车符:
    sed -i 's/\r$//' Samples_prefix.txt
    
  2. 优化Shell脚本的读取逻辑,增加兼容兜底,避免特殊格式文件引发执行错误,修正后的完整脚本如下:
    while IFS= read -r sample || [[ -n "$sample" ]]
    do
      # 兜底清除变量末尾可能残留的回车、尾部空白
      sample=$(echo "$sample" | tr -d '\r' | sed 's/[[:space:]]*$//')
      sample_id=$(echo "$sample" | cut -d/ -f 4 | tr -d '\r')
      
      java -jar ./trimmomatic-0.39.jar PE -threads 10 -phred33 \
        "${sample}_R1_001.fastq.gz" \
        "${sample}_R2_001.fastq.gz" \
        "${sample_id}_PE1.fq.gz" \
        "${sample_id}_SE1.fq.gz" \
        "${sample_id}_PE2.fq.gz" \
        "${sample_id}_SE2.fq.gz" \
        HEADCROP:3 ILLUMINACLIP:./adapters/TruSeq3-PE-2.fa:2:30:10 CROP:95 \
        LEADING:10 TRAILING:10 SLIDINGWINDOW:5:20 MINLEN:50 \
        2> "${sample_id}.out"
    done < Samples_prefix.txt
    
脚本修改说明
  • 给read命令增加IFS=、-r参数,避免读取时自动裁剪行首尾空白、转义特殊字符;增加|| [[ -n "$sample" ]]判断,兼容文件最后一行无换行符的场景,不会漏读最后一个样本
  • 对读取到的sample、提取的sample_id变量都增加了回车符清除逻辑,就算源文件没有提前转格式,也不会出现拼接断行问题
  • 所有变量引用都用双引号包裹,避免路径中存在空格、特殊字符时命令执行报错
  • 长命令用\拆分多行,提升可读性,不影响实际执行逻辑

内容的提问来源于stack exchange,提问作者Fernando_Souza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 00:01:20