Я хотел бы разбить 8 файлов (каждый из которых представляет собой хромосому), каждый из которых содержит примерно 2e9 строк, примерно на 5 фрагментов по 4e8 строк. Это файлы VCF (https://en.wikipedia.org/wiki/Variant_Call_Format), которые есть заголовок, а затем генетические варианты, поэтому мне нужно сохранить заголовки для каждого и повторно прикрепить их к конкретному заголовку хромосомы. Я делаю это в Linux на HPC.
Я сделал это с одним файлом перед использованием:
#grab the header
head -n 10000 my.vcf | grep "^#" >header
#grab the non header lines
grep -v "^#" my.vcf >variants
#split into chunks with 40000000 lines
split -l 40000000 variants
#reattach the header to each and clean up
for i in x*;do cat header $i >$i.vcf && rm -f $i;done
rm -f header variants
Я мог бы сделать это вручную со всеми 8 хромосомами, но я работаю в HPC с возможностями массива и чувствую, что это можно было бы сделать лучше с помощью цикла for, однако синтаксис меня немного сбивает с толку.
Я пытался:
#filelist is a list of the 8 chromosome files i.e. chr001.vcf, chr002.vcf...chr0008.vcf
for f in 'cat filelist.txt'; head -n 10000 my.vcf | grep "^#" >header; done
Это помещает все в один заголовок. Как мне поместить выходные данные в уникальные заголовки для каждой хромосомы? Точно так же, как это будет работать с разделением вариантов и повторным присоединением заголовков к каждому фрагменту каждой хромосомы?
Желаемый результат будет:
chr001_chunk1.vcf
chr001_chunk2.vcf
chr001_chunk3.vcf
chr001_chunk4.vcf
chr001_chunk5.vcf
...
chr008_chunk5.vcf
с каждым фрагментом vcf, имеющим заголовок от соответствующего хромосомного родителя.
Большое спасибо
header
каждый раз, потребуется переменная, управляющая хотя бы частью выходного имени файла. Подтвердите или исправьте: для каждого файла .vfc: извлеките информацию заголовка конфиденциально, извлеките данные, не являющиеся заголовком, из того же файла .vcf и разделите на несколько частичных файлов на 40 м строках; затем объедините частный заголовок и каждый частичный файл, присвоив имя фрагменту #. И какая у вас оболочка? После ответов я мог опубликовать сценарий. - person Milag   schedule 18.08.2020bash
для интерпретации скриптов? - person Milag   schedule 18.08.2020