2022-12-24vcf文件获取样品名称,染色体名称,修改

vcf-query -l xx.vcf

在进行admixture运算时,需要染色体名称为整数,常需要提取vcf文件中的染色体名称,并进行修改,需要以下几步。

第一步:提取vcf中染色体名称

awk '{print $1}'  xxx.vcf | grep '^[^#]' > chr.txt

第二步:将染色体的名称进行修改,如果染色体均以chr开头则说明没有未组装到染色体上的scaffold,若有未组装到染色体上的scaffold,则这些scaffold 用0 进行替代 (可以直接用excel)

awk '{print $1 "\t" $1}' chr.txt | awk  'gsub(/chr/,"",$2)' > chr_rename.txt

有unplaced scaffold则把原先chr.txt 分为两部分,再替换后,再合并成一个文件

第三步:利用bcftools 中的 annotate 命令修改染色体名称

bcftools annotate --rename-chr chr_rename.txt xxx.vcf > new_chr.vcf

第四步:利用plink生成.bed文件

plink --vcf new_chr.vcf --make-bed --out plink_out --const-fid

第五步:计算admixture中的最佳k值

for k in {1..9}; do echo "admixture --cv -j10 plink_out.bed $k >admix.${k}.log 2>&1"; done > admixture.sh

nohup sh admixture.sh

第六步:作图

grep CV log.txt | awk -F ':' '{print NR"\t"$3}' | sed '1i\K\tCV_error' >> CV_for_plot.txt

##  参数

awk -F ':'  以:分隔

      NR  当前行号

      "\t"  空格

      $2  第二列

sed '1i\K\tCV_error' 表示给第一行添加K 空格 CV_error

sed '5i\内容' 表示给第五行添加内容

R中绘图:

library(ggplot2)

mydata <- read.table("CV_for_plot.txt",header=T,sep="\t")

qplot(x=K,y=CV_error,color=I('black'),data=mydata)+geom_line(color="red",lwd=1)

##CV error最小的为最佳K值

再选择最佳K=xx,filter.snp.xx.Q结果文件作为画群体结构图的输入源文件

tbl=read.table("filter.snp.3.Q")

barplot(t(as.matrix(tbl)), col=rainbow(3),xlab="Individual #", ylab="Ancestry", border=NA)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容