如何解决在具有不同输出文件Linux
我想将8个文件(每个代表一个染色体)分解成大约5个大块的4e8行,每个文件有大约2e9行。这些是VCF文件(https://en.wikipedia.org/wiki/Variant_Call_Format),其中有一个标头,然后是遗传变异,因此我需要保留每个标头并将它们重新附加到特定于染色体的标头上。我正在HPC的Linux上执行此操作。
在使用之前,我只用一个文件完成了
#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块都具有来自其各自染色体“父”的标头。
非常感谢
解决方法
#!/bin/bash
#
# scan the current directory for chr[0-9]*.vcf
# extract header lines (^#)
# extract variants (non-header lines) and split to 40m partial files
# combine header with each partial file
#
# for tuning
lines=40000000
vcf_list=(chr[0-9]*.vcf)
if [ ${#vcf_list} -eq 0 ]; then
echo no .vcf files
exit 1
fi
tmpv=variants
hdr=header
for chrfile in "${vcf_list[@]}"; do
# isolate without . extn
base=${chrfile%%.*}
echo $chrfile
# extract header lines
head -1000 $chrfile | grep "^#" > $hdr
# extract variants
grep -v "^#" $chrfile > $tmpv
#
# split variants into files with max $lines;
# output files are created with a filter to combine header data and
# partial variant data in 1 pass,avoiding additional file I/O;
# output files are named with a leading 'p' to support multiple
# runs without filename collision
#
split -d -l $lines $tmpv p${base}_chunk --additional-suffix=.vcf \
--filter="cat $hdr - > \$FILE; echo \" \$FILE\""
done
rm -f $tmpv $hdr
exit 0
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。