我的 SSD 上有大约 500 GB 的可用磁盘空间。我正在尝试对 10 个 gzip 文件(每个文件大小约为 25GB)运行一个操作。parallel
但是,当我在for 循环中执行此操作时,我一直用完存储空间,因为在同一目录中sort
写入了很多内容temporary files
,并且显然不会自行清理。
我试图从这些文件中随机抽取一定数量的行。
bcftools view "${FILES[i]}".vcf.gz | awk '{printf("%f\t%s\n",rand(),$0);}' | sort -t $'\t' -T . -k1,1g | head -n "${SUBSET_COUNT[i]}" | cut -f 2- >> "${FILES[i]}"_"${SUBSET_COUNT[i]}"_subset.vcf &
此操作对每个文件大约需要 1 小时(当我一个一个地执行时),但我想并行执行此操作,因为我需要对更多批次的此类文件重复此操作。
我真的不明白你为什么要采用这种方法,我怀疑它无论如何都行不通,因为
rand()
它没有被重新初始化并且可能总是给出完全相同的输出。试试吧:无论如何,整个事情似乎太复杂了,您可以
shuf
改用:这将从其输入中随机选择 100 行。当然,这不是需要标头的有效 VCF 文件。因此,如果您想生成有效的 VCF,请将标头添加到每个文件,然后随机选择 N 个非标头行:
或者,更好的是,避免编写未压缩的文本: