Уважаемое сообщество переполнения стека,
У меня есть 100 файлов .VCF (тип файла txt). В столбце «ID» есть различные вызовы структурных вариантов:
MantaINS
MantaINV
MantaDEL
MantaBND
MantaDUP
Canvas:REF
Canvas:GAIN
Canvas:LOSS
(рядом с числом, например, MantaINS:00:13:467, Canvas:Gain:594:31:23 и т. д.)
Файлы выглядят так (но они намного больше, тысячи записей в файле)
CHROM POS ID REF ALT QUAL FILTER INFO FORMAT
1 2827693 MantaDEL:0:2:5000 CCGTGGATGCGGGGACCCGCATCCCCTCTCCCTTCACAGCTGAGTGACCCACATCCCCTCTCCCCTCGCA C . PASS SVTYPE=DEL;END=2827680;BKPTID=Pindel_LCS_D1099159;HOMLEN=1;HOMSEQ=C;SVLEN=-66 GT:GQ 1/1:13.9
2 321682 MantaBND:5:7:1:0 6 PASS IMPRECISE;SVTYPE=DEL;END=321887;SVLEN=-105;CIPOS=-56,20;CIEND=-10,62 GT:GQ 0/1:12
2 14477084 MantaINS:88:22:00:3 12 PASS IMPRECISE;SVTYPE=DEL;END=14477381;SVLEN=-297;MEINFO=AluYa5,5,307,+;CIPOS=-22,18;CIEND=-12,32 GT:GQ 0/1:12
3 9425916 MantaDEL:5:333:000 23 PASS IMPRECISE;SVTYPE=INS;END=9425916;SVLEN=6027;CIPOS=-16,22;MIINFO=L1HS,1,6025,- GT:GQ 1/1:15
3 2658945 MantaDUP:5:22:000 23 PASS IMPRECISE;SVTYPE=INS;END=9425916;SVLEN=6027;CIPOS=-16,22;MIINFO=L1HS,1,6025,- GT:GQ 1/1:15
6 1325462 MantaINV:3:000:000 23 PASS IMPRECISE;SVTYPE=INS;END=9425916;SVLEN=6027;CIPOS=-16,22;MIINFO=L1HS,1,6025,- GT:GQ 1/1:15
6 5783961 CavnasREF:7:943:1453 23 PASS IMPRECISE;SVTYPE=INS;END=9425916;SVLEN=6027;CIPOS=-16,22;MIINFO=L1HS,1,6025,- GT:GQ 1/1:15
7 9425916 CanvasGAIN:9:323:123 23 PASS IMPRECISE;SVTYPE=INS;END=9425916;SVLEN=6027;CIPOS=-16,22;MIINFO=L1HS,1,6025,- GT:GQ 1/1:15
8 9425916 CanvasLOSS:2:932:123 23 PASS IMPRECISE;SVTYPE=INS;END=9425916;SVLEN=6027;CIPOS=-16,22;MIINFO=L1HS,1,6025,- GT:GQ 1/1:15
Каждый файл находится в отдельной папке, и я создал текстовый файл с путями к файлам для всех 100 vcfs. Этот файл выглядит так (только первые 4):
genomes/by_date/2015-09-03/batch1/patient30/patient30.SV.vcf.gz
genomes/by_date/2016-03-05/batch1/patient4/patient4.SV.vcf.gz
genomes/by_date/2018-10-14/batch1/patient16/patient16.SV.vcf.gz
genomes/by_date/2018-012-28/batch1/patient100/patient100.SV.vcf.gz
genomes/by_date/2018-03-14/batch1/patient1/patient1.SV.vcf.gz
Я хочу разделить файлы по типу структурного варианта, который находится в столбце идентификатора, поэтому для каждого входного файла vcf я получаю 8 выходных файлов, разделенных по типу идентификатора, например. для Manta_INS мне нужен файл .txt, в котором будет только строка ниже, взятая из приведенного выше примера:
2 14477084 MantaINS:88:22:00:3 12 PASS IMPRECISE;SVTYPE=DEL END=14477381 SVLEN=-297;MEINFO=AluYa5,5,307,+;CIPOS=-22,18;CIEND=-12,32 GT:GQ 0/1:12
т.е. для каждого входного vcf я хотел бы, чтобы на выходе было 8 разделенных файлов.
(например, человек 1.vcf -> человек1_MantaINS.txt, человек1_MantaDEL.txt, человек1_MantaINV.txt и т. д.)
В одном файле VCF я запустил:
for T in MantaINS MantaINV MantaDEL MantaBND MantaDUP Canvas
do
bcftools view person1.vcf | awk -v T=${T} '{split($3,a,/\:/);if(a[1]==T) print $0}' > ${T}.txt
done
Что отлично работает (кроме вызовов Canvas, в которых есть двоеточие). Однако я хочу ввести список из 100 файлов для запуска одного и того же цикла.
Я устал:
for T in MantaINS MantaINV MantaDEL MantaBND MantaDUP Canvas:REF Canvas: GAIN Canvas:LOSS
do
parallel -j6 "bcftools view {} | awk -v T=${T} '{split($3,a,/\:/);if(a[1]==T) print $0}' > $basename{}.txt" :::: paths_to_files.txt
done
Что дает мне сообщение об ошибке: «нет такого файла или каталога» из параллельной для любого из моих типов файлов.
Я работаю над HPC через удаленный терминал.
Ваша помощь будет принята с благодарностью.
Большое спасибо
bcftools
илиparallel
. Возвращаясь к предыдущему вопросу в своем вопросе, вы упоминаетеperson1
. Это предполагает, что естьperson2 ... personN
? Почему бы не обернутьfor T
внутри другого циклаfor P in person1 ... personN
? Я бы удалил все дополнительные попытки решить вашу проблему и оставил бы только ту версию, которая, по вашему мнению, действительно должна работать или является вашей лучшей попыткой.... - person shellter   schedule 29.10.2019for P
и должны использовать параллель, я рекомендую добавить тег дляgnu-parallel
. Мне нужно провести некоторое исследование, чтобы понять вашу строкуparallel
cmd, а сегодня я занят. ИЛИ я бы написал awk-скрипт, который фильтрует какawk -v T="$T" '/MantaINS/{print $0 > "MantaINS "T".out}' InFile
. Это должно быть достаточно быстро. Удачи. - person shellter   schedule 29.10.2019MantaINS
похожие цели в одном скрипте, и когда каждая строка инициирует совпадение, она будет записываться в соответствующий файл outFile. Поэкспериментируйте с одним, прежде чем возиться со всем проектом ;-). Нужно идти. Удачи. - person shellter   schedule 29.10.2019$3
,$0
,$basename
и т. д.). - person jhnc   schedule 30.10.2019