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

Shell循环处理GWAS线性回归文件筛选ADD行无输出问题咨询

问题定位与修复方案

核心问题梳理

  • 输出路径问题
    PBS调度作业的默认工作目录为提交作业时的用户家目录,你脚本中未指定输出文件的存储路径,所有生成的${tox}_resid_ADD文件都被写入了PBS默认工作目录,而非原始GWAS结果文件所在的目录,因此你在原始数据路径下找不到生成的文件。
  • 标识段提取规则缺陷
    你使用${tox%%_*}截取标识段,当标识段本身包含下划线时(比如执行日志里的Induration_G2),会从第一个下划线处截断,最终得到错误的标识Induration而非正确的Induration_G2。
  • 路径拼写不一致
    脚本中写的遍历路径是/scrat/genome/hj86/Late_Tox_GWAS/*_resid.glm.linear,但执行日志显示实际文件路径为/scratch/genomeqol/hkj7/Late_Tox_GWAS/,路径拼写错误也会导致预期外的执行结果。

修复后脚本

#!/bin/bash
#PBS -N Late_Tox_regression_ADD
#PBS -l walltime=01:00:00
#PBS -l nodes=1:ppn=8
#PBS -l vmem=16gb
#PBS -m bea
#PBS -M my email address
set -x

# 定义原始文件所在的工作目录,和执行日志的实际路径保持一致
work_dir="/scratch/genomeqol/hkj7/Late_Tox_GWAS"
cd ${work_dir} || exit 1 # 切换到目标目录,切换失败直接退出避免错误输出

for fname in *_resid.glm.linear
do
    # 修改标识段提取规则,兼容标识段本身带下划线的场景
    tox="${fname#*.}"
    tox="${tox%_resid.glm.linear}"
    # 过滤结果直接输出到当前工作目录
    awk 'NR==1 || $7 == "ADD"{print}' "${fname}" > "${tox}_resid_ADD"
done

修复说明

  1. 执行前先切换到原始文件所在目录,输出文件也会生成在该目录下,无需再去其他路径查找结果
  2. 修改了标识段提取逻辑,从后缀方向截断固定的_resid.glm.linear字符,可完整保留标识段内的下划线
  3. 统一使用执行日志显示的真实文件路径,避免拼写错误导致的文件读取失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 23:54:03