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

如何遍历.vcf文件提取文件名指定片段作为样本名并存储为变量循环使用

有两种常用的实现方式,你可以根据自身脚本的逻辑需求选择:

方式1:循环内单次提取样本ID,单轮循环内复用

这种方式适合只需要遍历一次vcf文件、单轮循环内完成所有多步处理的场景,代码最简单:

for vcf_file in *.vcf
do
    # 仅执行一次字符串截断,将样本ID存入变量,后续全程复用
    sample_id=${vcf_file%_Non-Filtered.vcf}
    
    # 多步处理直接使用$sample_id拼接文件名即可,无需重复写截断逻辑
    # 第一步处理示例
    your_command1 --input "$vcf_file" --output "${sample_id}_result1.vcf"
    # 第二步处理示例
    your_command2 --input "${sample_id}_result1.vcf" --output "${sample_id}_result2.vcf"
    # 其他步骤同理
done

方式2:预提取所有样本ID存入数组,支持后续反复遍历

如果你的脚本需要多次循环遍历样本ID做不同批次的处理,可以先把所有样本ID提前提取存入数组,后续直接遍历数组即可:

# 第一步:遍历所有vcf文件,提取样本ID存入数组
sample_id_list=()
for vcf_file in *.vcf
do
    sample_id_list+=("${vcf_file%_Non-Filtered.vcf}")
done

# 后续任意位置需要遍历样本时,直接遍历数组即可,无需再处理原始文件名
for sample_id in "${sample_id_list[@]}"
do
    input_file="${sample_id}_Non-Filtered.vcf"
    out1="${sample_id}_filter_pass.vcf"
    out2="${sample_id}_annotated.vcf"
    
    # 你的处理逻辑
    filter_tool --input "$input_file" --output "$out1"
    annotate_tool --input "$out1" --output "$out2"
done

注意事项

  • 所有变量调用时建议包裹双引号,避免文件名/路径存在空格时出现解析错误
  • 字符串截断时建议写全后缀%_Non-Filtered.vcf,不要简写为%_*,避免样本ID本身包含下划线时出现误截断

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 14:12:01