文件格式 | 对VCF文件的常见操作

发表于: 2024-02-20

压缩

bcftools view sativa332.indel.Lsat_1_v5_gn_7_15020.hard.vcf -Oz -o sativa332.indel.Lsat_1_v5_gn_7_15020.hard.vcf.gz
  • -Oz: 指定输出文件为压缩格式 gz.
  • -o: 指定输出文件名。

建立索引

只能对压缩后的vcf文件建立索引

bcftools index -t sativa332.indel.Lsat_1_v5_gn_7_15020.hard.vcf.gz
  • -t: 填压缩后的 vcf.gz 文件.

tabix -p vcf view.vcf.gz
  • -p: 填压缩后的 vcf.gz 文件.

上述命令任选其一, 均可完成建索引.

提取变异

gatk SelectVariants -R Lactuca_sativa_Salinas_V8.fa -V Lactuca.snp.vcf.gz -L chr7:18846094-18857694 -L chr8:1884094-188009694 -O sativa332.snp.Lsat_1_v5_gn_7_15020.hard.vcf.gz
  • -R: 参考基因组fasta文件
  • -V: 输入vcf文件
  • -L: 需要提取的变异区间,可以为 chrx:xx-xx 或直接提取整条染色体 chrx, 但格式必须与输入vcf文件相同,如: chr1, Chr1, Chr01, 可以同时提取多个区间 (重复使用该参数)
  • -O: 输出vcf文件名

bcftools view -S keep.list test.vcf > sub_indv.vcf
  • -S: 需要提取的变异的位置信息,可以是 染色体\t具体位置 两列,也可以是 染色体\t起始\t终止 三列.

上述命令任选其一即可

提取样品

gatk SelectVariants -R Lactuca_sativa_Salinas_V8.fa -V Lactuca.snp.vcf.gz -sn s001 -sn s002 -sn s003 -O sativa332.snp.Lsat_1_v5_gn_7_15020.hard.vcf
  • -R: 参考基因组fasta文件
  • -V: 输入vcf文件
  • -O: 输出vcf文件名
  • -sn: 需要提取的样品名,可以同时提取多个样品 (重复使用该参数)

bcftools view view.vcf.gz -s NA00001,NA00002  -o subset.vcf 
  • -s: 需要提取的样品名,,分割
  • -o: 输出文件名

bcftools view input.SNP.revhet.recode.vcf.gz -S input_samples.list -Oz -o output_fixed.vcf.gz
  • -S: 需要提取的样品名称列表
vcftools --gzvcf in.vcf.gz --recode --recode-INFO-all --stdout --keep id.txt  > out.vcf.gz
  • --gzvcf: 输入文件名
  • --recode: 告诉程序使用过滤器写入一个新的vcf文件
  • --recode-INFO-all: 保留旧vcf文件中的所有INFO标志
  • --stdout: 配合后面的管道函数,如果输出文件是压缩文件 --stdout > out.vcf.gz (也可以不压缩),不压缩时,可以直接 --out out 此处第一个out是命令,第二个out是文件名 (也可以 --stdout > out.vcf)
  • --keep: 所需要的样品名列表

选择一个即可完成

去除样品

适用于去除少数样品

bcftools view example.vcf.gz -s ^NA00001,NA00002  -o subset.vcf 
  • -s ^ 后接需要去除的样品名, , 分割
  • -o 输出文件名

适用于较多样品

vcftools --gzvcf in.vcf.gz --recode --recode-INFO-all --stdout  --remove id.txt  > out.vcf.gz
  • --gzvcf: 输入文件名
  • --recode: 告诉程序使用过滤器写入一个新的vcf文件
  • --recode-INFO-all: 保留旧vcf文件中的所有INFO标志
  • --stdout: 配合后面的管道函数,如果输出文件是压缩文件 --stdout > out.vcf.gz (也可以不压缩), 不压缩时,可以直接 --out out 此处第一个 out 是命令,第二个 out 是文件名 (也可以 --stout > out.vcf)
  • --remove: 所需要的样品名列表

修改样品名

bcftools的常用命令

bcftools reheader --samples sub.list -o output.vcf.gz input.vcf.gz
  • --samples: 内容为oldname\tnewname, 可有多行 (修改多个样品名)

MAF 过滤

参考: VCFtools的使用(参数说明)

/zfssz5/BC_PUB/Software/03.Soft_ALL/vcftools-0.1.13/bin/vcftools --gzvcf sativa332.hard.Lsat_1_v5_gn_7_15020.snp_indel.vcf.gz --max-missing 0.9 --maf 0.05 --recode --recode-INFO-all --stdout | /ldfssz1/ST_AGRIC/P18Z10200N0148_LETTUCE/USER/bin/01.software/smcpp1.13.1/bin/bgzip -c > sativa332.maf.Lsat_1_v5_gn_7_15020.snp_indel.vcf.gz
  • --gzvcf: 输入文件名
  • --max-missing: 缺失率,0为接受完全缺失,1为接受数据全都存在
  • --maf: Minor Allele Frequency二等位基因频率进行过滤,通常保留大于0.05的。
  • --recode : 告诉程序使用过滤器写入一个新的vcf文件
  • --recode-INFO-all: 保留旧vcf文件中的所有INFO标志
  • --stdout: 配合后面的管道函数,如果输出文件是压缩文件 --stdout > out.vcf.gz (也可以不压缩), 不压缩时,可以直接 --out out 此处第一个 out 是命令,第二个 out 是文件名 (也可以 --stout > out.vcf)
  • bgzip -c >: 压缩文件

提取染色体名称

bioawk -c vcf ' { print $chrom } ' old.vcf.gz | sort -n | uniq > ChrName.txt
  • sort -n :按数值排序
  • uniq: 去重

更改染色体名称

bcftools annotate --rename-chrs NewChrName.txt old.xxx.vcf.gz -Oz -o new.xxx.gz 
  • rename-chr: 接新老名称的对应关系,其中NewChrName.txt文件中第一列为旧ID,第二列为对应的新ID
  • -Oz: 指定输出文件为压缩格式 gz
  • -o: 指定输出文件名

按染色体拆分vcf

for i in {chr1..chr9};do echo -e "gatk SelectVariants -R Lactuca_sativa_Salinas_V8.fa -V Lactuca.snp.vcf.gz -L chr7:18846094-18857694 -L $i -O sativa332.snp.$i.hard.vcf.gz";done

循环使用提取变异命令

按染色体合并vcf (推荐转换成bed文件合并,更快速)

参考: 多款软件进行vcf合并-gatk、vcftools、bcftools

gatk GatherVcfs -I concat-a.vcf -I concat-b.vcf -O combine_a_b_samesample_diffsites.vcf
  • -I: 输入文件名(可重复使用该参数)
  • -O: 输出文件名
gatk MergeVcfs -I concat-a.vcf -I concat-b.vcf -O combine_a_b_diffsample_allsites_gatk.vcf
  • -I: 输入文件名(可重复使用该参数)
  • -O: 输出文件名
bcftools concat concat-a.vcf concat-b.vcf -o combine_a_b_samesample_diffsites_bcftools.vcf
  • concat:后接需要合并的vcf名
  • -O: 输出文件名

合并SNP和indel

bcftools concat -R Lsat_1_v5_gn_7_15020.region -a sativa332.indel.hard.vcf.gz sativa332.snp.vcf.gz -Oz -o sativa332.hard.snp_indel.vcf.gz
  • -R: 只有包含在这个文件中指定的区域的记录才会被合并,格式为 chr1\t1389\t111333,可有多行(多个区间)
  • -a: 需要合并的文件,示例中的两个文件将按顺序合并
  • -Oz: 指定输出文件为压缩格式 gz.
  • -o: 指定输出文件名。

vcf的基本信息

bcftools stats example.vcf.gz >  example.vcf.stats

提取样品ID信息

bcftools query -l example.vcf.gz >example.id.list
  • -l: 后接需要查询的vcf文件

提取变异信息

参考: bcftools常用命令详解

bcftools query -f '%CHROM\t%POS\t%REF\t%ALT[\t%SAMPLE=%GT]\n' view.vcf.gz
  • %CHROM: 代表VCF文件中染色体那一列,其他的列,比如POS, ID, REF, ALT, QUAL, FILTER也是类似的写法
  • []: 对于FORMAT字段的信息,必须要中括号括起来
  • %SAMPLE: 代表样本名称
  • %GT: 代表FORMAT字段中genotype的信息