如何编写脚本批量循环处理多个ID,提取vcf.gz内容并后台运行
批量从压缩VCF文件中提取指定ID行并后台执行
我有长文本压缩文件(*.vcf.gz),想要从中提取所有包含指定ID(比如id123)的行,并保存到对应名称的新文本文件中。
单个ID的处理命令如下:
zgrep -Hx id123 *.vcf.gz > /home/Roy/id123.txt
但实际有20个ID需要处理,手动重复执行命令过于繁琐,且文件体积大、处理耗时久,希望能批量执行并让任务在后台运行。
可以编写如下脚本遍历ID列表,自动完成批量处理:
# 定义需要处理的ID列表 list=("id123" "id124" "id125" "id126") # 遍历每个ID执行提取命令,& 让任务后台运行 for i in "${list[@]}" do zgrep -Hx "$i" *.vcf.gz > "/home/Roy/${i}.txt" & done # 等待所有后台任务完成后再退出脚本 wait
额外优化说明
- 给变量
$i和输出路径加上双引号,避免ID或路径含特殊字符时出现异常 - 命令末尾的
&让每个提取任务在后台并行执行,大幅缩短总处理时间 - 脚本末尾的
wait确保所有后台任务完成后再结束脚本,方便后续确认处理状态
内容的提问来源于stack exchange,提问作者RoyBatty
相关产品推荐
相关产品推荐

