【发布时间】:2020-02-22 06:33:41
【问题描述】:
我又来了!我想优化我的 bash 脚本以减少每个循环所花费的时间。 基本上它的作用是:
- 从 tsv 获取信息
- 使用该信息通过 awk 查找文件
- 打印该行并将其导出
我的问题是: 1)文件是60GB的压缩文件:我需要一个软件来解压它(我现在实际上正在尝试解压它,不确定我是否有足够的空间) 2) 反正要研究很久了
我改进它的想法:
- 0) 如前所述,如果可能的话我会解压文件
将 GNU 与
parallel -j 0 ./extract_awk_reads_in_bam.sh ::: reads_id_and_pos.tsv并行使用,但我不确定它是否按预期工作?我将每项研究的时间从 36 分钟缩短到 16 分钟,所以只是 2.5 倍? (我有 16 个核心)我在想(但它可能对 GNU 来说是多余的?)拆分 我的信息列表来查看几个文件以启动它们 并行
- 按读取名称对 bam 文件进行排序,并在完成后退出 awk 找到 2 个匹配项(不能超过 2 个)
这是我的 bash 脚本的其余部分,我非常愿意提出改进它的想法,但我不确定我是否是编程界的超级明星,所以保持简单可能会有所帮助吗? :)
我的 bash 脚本:
#/!bin/bash
while IFS=$'\t' read -r READ_ID_WH POS_HOTSPOT; do
echo "$(date -Iseconds) read id is : ${READ_ID_WH} with position ${POS_HOTSPOT}" >> /data/bismark2/reads_done_so_far.txt
echo "$(date -Iseconds) read id is : ${READ_ID_WH} with position ${POS_HOTSPOT}"
samtools view -@ 2 /data/bismark2/aligned_on_nDNA/bamfile.bam | awk -v read_id="$READ_ID_WH" -v pos_hotspot="$POS_HOTSPOT" '$1==read_id {printf $0 "\t%s\twh_genome",pos_hotspot}'| head -2 >> /data/bismark2/export_reads_mapped.tsv
done <"$1"
我的 tsv 文件格式如下:
READ_ABCDEF\t1200
非常感谢你++
【问题讨论】:
-
您是否考虑过用 Python 重写脚本的并行部分?我知道你可以在 bash 中实现它们,但这可能会让你的生活更简单......
标签: bash bioinformatics gnu-parallel