Этот bash-скрипт является частью конвейера, обрабатывающего заархивированный файл .vcf, содержащий геномы нескольких пациентов (это означает, что файлы имеют огромный размер даже в заархивированном виде, например, 3–5 ГБ).
Моя проблема в том, что мне постоянно не хватает памяти при запуске этого скрипта. Он запускается на виртуальной машине с высоким уровнем памяти GCP.
Я надеюсь, что есть способ оптимизировать использование памяти, чтобы это не потерпело неудачу. Я заглянул в него, но ничего не нашел.
#!/bin/bash
for filename in ./*.vcf.gz; do
[ -e "$filename" ] || continue
name=${filename##*/}
base=${name%.vcf.gz}
bcftools query -l "$filename" >> ${base}_list.txt
for line in `cat ${base}_list.txt`; do
bcftools view -s "$line" "$filename" -o ${line}.vcf.gz
gzip ${line}.vcf
done
done
bcftools query
/view
,gzip
илиfor line in `cat ...`
? - person Socowi   schedule 22.01.2021[ -e "$filename" ]
скорее всего бесполезен.*.csv.gz
перечисляет только существующие файлы и каталоги.-e
проверяет, существует ли$filename
. Если вы хотите убедиться, что$filename
является файлом, а не каталогом, используйте-f
. - person Socowi   schedule 22.01.2021*.csv.gz
перечисляет только существующие файлы и каталоги => нет, если шаблон не соответствует ни одному файлу (кромеshopt -s nullglob
). В этом случае вы получитеfilename=*.csv.gz
, и это причина-e
теста IMO. Если имя файла должно указывать на файл, то лучше использовать-f
test. - person xhienne   schedule 22.01.2021