利用plink进行数据预处理(修剪SNP集)
!!!注意:如果要同时使用,正确做法是先SNP(geno)后样本(mind)
SNP缺失率多少用不了 - CSDN
1.缺失率 --geno 0.05
删除基因型缺失率大于5%的SNPs,大于95%的个体都具有的变异位点才保留
就是缺失,没测出来
2.最小等位基因频率 --maf 0.01
将次要等位基因频率maf < 0.01的SNP筛选出来并过滤掉,仅包括MAF >= 0.01的SNP,默认值为0.01(防止假阳性)
(1.2在近交系数、NJ树、iqtree、iBS、iBD、ML树、Fst、Roh前用,最基本的过滤)
3.LD过滤 --indep-pairwise 50 25 0.2
窗宽50、删除LD大于0.2的SNP对中一个、每次将窗口向前移动25个SNP
(3只在PCA 、ADMIXTURE前用)
芯片数据不需要ld过滤!!!!!
根据id提取vcf(提取重测序数据不会有日志等啰嗦行)
nohup /home/software/bcftools/bcftools view -S id.txt test.vcf.gz -Ov > sampleid.vcf &
# id.txt为个体名
根据染色体提取vcf
nohup /home/software/vcftools/src/cpp/vcftools --gzvcf test.vcf.gz --recode --recode-INFO-all --chr n --out out.vcf &
nohup bcftools view -r 25,27,28 test.vcf.gz -o ./test_chr252728.vcf.recode.gz -O z &
根据位置提取vcf(pos文件含染色体号和位置)
nohup /home/software/vcftools/src/cpp/vcftools --gzvcf test.vcf.gz --positions ./position.txt --recode --out test.vcf.gz-position &
根据区间提取vcf
nohup /home/software/bcftools/bcftools view test.vcf -Oz -o test.vcf.gz &
nohup /home/software/bcftools/bcftools index test.vcf.gz &
nohup /home/software/bcftools/bcftools filter test.vcf.gz --regions 18:14700001-14800001 > 14700001-14800001.vcf &
提取vcf文件中的个体list (不会影响fid、iid)
nohup /home/software/bcftools/bcftools query -l test.vcf > test-id.txt &
格式转化(不会影响fid、iid)
### vcf to map(此步骤只适合染色体号为123格式,如为NC,则map文件第一列为未知,即0)
nohup /home/software/vcftools/src/cpp/vcftools --vcf test.vcf --plink --out test &
### map to bed
nohup /home/software/plink --allow-extra-chr --chr-set 29 --file test --make-bed --out test &
### bed to vcf
nohup /home/software/plink --allow-extra-chr --chr-set 29 --bfile test --recode vcf-iid --out test &
### vcf to map (重测序数据使用)
nohup /home/software/plink --vcf test.vcf --recode --allow-extra-chr --chr-set 30 --out test &
### map to vcf (用于beagle)
nohup plink --allow-extra-chr --chr-set 30 --file test --recode vcf-iid --out test &
去除多等位基因,indel
nohup /home/software/bcftools/bcftools view -m 2 -M 2 --type "snps" test.vcf.gz -O z -o test.record.snps.vcf.gz &
nohup /home/software/vcftools/src/cpp/vcftools --vcf test.vcf --remove-indels (--max-missing 0.9 --maf 0.03) --min-alleles 2 --max-alleles 2 --recode --recode-INFO-all --out test.miss.snp.recode.vcf &
去除0号染色体
nohup /home/software/vcftools/src/cpp/vcftools --vcf test.vcf --recode --recode-INFO-all --not-chr 0 --out test_noinclude0 &
过滤掉indel,只保留snp:
nohup /home/software/vcftools/src/cpp/vcftools --remove-indels --recode --recode-INFO-all --vcf test.vcf --stdout > test.snp.vcf &
过滤掉snp,只保留indel:
nohup /home/software/vcftools/src/cpp/vcftools --keep-only-indels --recode --recode-INFO-all --vcf test.vcf --stdout > test.indel.vcf &
统计indel碱基数量:
bcftools stat xxx.vcf>xxx.vcf.stat
在vcf文件中删除一个个体
nohup /home/software/vcftools/src/cpp/vcftools --vcf test.vcf --recode --recode-INFO-all --stdout --remove-indv XXX > out.vcf &
缺失率统计
## 按照位点统计
nohup /home/software/vcftools/src/cpp/vcftools --gzvcf test.vcf.gz --missing-site --out test.SNP_missing &
## 按照个体统计
nohup /home/software/vcftools/src/cpp/vcftools --vcf test.vcf --missing-indv --out test.SNP_missing &
解压缩保留源文件
nohup gunzip -c test.vcf.gz > test.vcf &
统计vcf压缩文件共有行
gzip -dc test.vcf.gz|wc -l
循环更改脚本(例如将2,$6)
sed -i 's/ $0/$2,$6/g' test.sh (-i 为在文件中修改)
sort排序与去重复
# 以第2列来排序,n为将文本作为数值解释
sort -n -k 2 test.bed > test.sorted.bed
# 去重复,去除文件中相同的行
sort -n -k 2 -u test.bed > test-u.bed
# -t $'/t'指定tab为分隔符,n为将第一列按照数值排列(1,2,3),g为按照科学计数法排列(1,2,3)
sort -t $'/t' -k 1n,1 -k 3g,3 test.bed > test.sorted.bed
sort -k 1,1d -k 2,2n 第一列按照字符排序(1,10,11,12),第二列按照数字排序)
sort -k 2 -g test.bed > test.sorted.bed(第二列按照数字大小排序)
sort更改空格与tab键
sed -i 's/\t/ /g' test.bim #去除vcf文件中的\t键
sed -i 's/ /\t/g' test.bim
去除以#号开头的注释行
sed -i '/^#/d' id.txt
去除文件前36行
sed -i '1,36d' id.txt
去除重复
#重复行应为相邻状态
uniq test.txt > test-u.txt
vi打开vcf文件后/寻找的
/find
excel
=VLOOKUP(A1,excelA1:D1,4,0) 取对应值
=LEFT(A1,2) 取A1的左侧2列
=RIGHT(A1,2) 取A1的右侧2列
=ROUNDDOWN(A1,0)去除小数点
=LOOKUP(9^9,B2:E2) 取行最后一列数据
=LEN(A1)统计单元格字数
=IF(MOD(A1,3)=0,A1,"") 删选3倍数
=IF(COUNTIF(J$1:J1,J1)=1,COUNTIF(J:J,J1),"") 统计某列某单元格出现得次数
=--("0 "&M2) 将/分隔的数值用小数的形式表现
去除多余染色体
nohup /home/software/vcftools/src/cpp/vcftools --vcf test.vcf --recode --recode-INFO-all --not-chr 0 --out test_noinclude0 &
去除空白行
sed '/^$/d' test.txt > test-kongbai.txt
excel表格中将1月1日替换为1/1
1.将所有数据改为文本格式
2.点击替换
3.44197 的格式选择文本
1|1的格式不设定
4.全部替换即可
linux寻找共同点
sort 1.txt > 1.sort.txt
sort 2.txt > 2.sort.txt
comm -12 1.sort.txt 2.sort.txt > out.txt
提取出文件2中与文件1中的相同行
grep -f 1.txt 2.txt
根据第一列提取对应染色体
awk '{if($1==18) print $0}' test.txt > chr18.test.txt
芯片数据与重测序合并删除列
sed -i 's/ /\t/g' banbenposition.txt tab键
sed -e "s/^M//" banbenposition.txt > banbenposition_huiche.txt 去除回车符
cat Data_position.recode.vcf| awk -F " " '{$1=null;print}' > test_1.vcf
cat test_1.vcf| awk -F " " '{$1=null;print}' > test_12.vcf
paste -d "" banbenposition_huiche.txt test_12.vcf > Data_position.recode_banben.vcf
将已经替换染色体的前两列v1.0版本与去除前两列信息的v3.1版本vcf进行合并。
sed -i 's/ /\t/g' Data_position.recode_banben.vcf
去除第7列为0的行
首先要排序
sort -n -k 7 test.txt > test.sort.txt &
然后删除
cat test.sort.txt |awk '{if($7!="")print $0}' > test.sort1.txt
寻找重合的区间
bedtools | 快速筛选重合区间 - 知乎 (zhihu.com)
nohup /home/software/bedtools2/bin/bedtools intersect -a a.txt -b b.txt -wao > ab.window.ihs.intersect.bed &
# 打开 a.txt
1 2419435 2419436
1 2419463 2419464
1 2419517 2419518
1 2419597 2419598
1 2419765 2419766
1 2420278 2420279
1 2420283 2420284
1 2420335 2420336
# 打开 b.txt
1 2100001 2200001
1 2300001 2400001
1 2400001 2500001
1 2500001 2600001
1 2600001 2700001
1 2700001 2800001
1 5200001 5300001
1 6600001 6700001
1 7600001 7700001
# 打开 ab.window.ihs.intersect.bed
1 2798804 2798805 1 2700001 2800001 1
1 2799204 2799205 1 2700001 2800001 1
1 2799911 2799912 1 2700001 2800001 1
1 2800978 2800979 . -1 -1 0
1 2801066 2801067 . -1 -1 0
1 2801680 2801681 . -1 -1 0
1 2801738 2801739 . -1 -1 0
1 2801784 2801785 . -1 -1 0
# 打开结果文件,前四列代表文件一里的区间,第5至8列代表文件一与文件二重合的区间,第九列代表重合的长度
# 文件一与文件二的重合长度为1
# .代表文件一中的区间d在文件二中未找到重合区间
随后提取出第7列为1的行,首先排序
$ nohup sort -n -k 7 ab.window.ihs.intersect.bed> ab.window.ihs.intersect.sort.txt &
$ nohup cat ab.window.ihs.intersect.sort.txt |awk '{if($7!="0")print $0}' > ab.window.ihs.intersect.sort1.txt &
查看ped文件有多少列
cat filename | awk '{print NF}'
cat filename | awk -F '{print NF}' (非tab键文件使用-F)
传数据
scp /XXX [email protected]:/XXX