easyui一行数据拆分成两行_如何用一行命令将一个多样本vcf文件拆分成多个单样本vcf文件(生信高手帖,入门者慎入)...

    我们有一个如下文件:第一行为列名称,第1到第4列为每个样本共用的信息,从第5列到最后一列为每个样本的某个变量的数据,假如我们要将此文件拆分成每个样本的列与第1到第4列的合并而成的多个单个样本文件,该如何处理呢?

举个栗子:

chr start   end allele  D190531P1-180244WS-1_L3.bam D190531P1-180244WS-F-1_L3.bam   D190531P1-180244WS-M-1_L3.bam   D190531P1-180245WS_L3.bam   D190531P1-180246WS_L3.bam   DYDFA-381-1.bam
1 819917 819917 A/G 1 1 1 1 1 0
1 861630 861630 G/A 1 0.6 0.4 1 0.4 0
1 863124 863124 G/T 1 1 0.462366 1 0.358025 0
1 863138 863138 A/C 0 0 0.557895 0 0.648352 0
1 866319 866319 G/A 1 1 1 1 0.979167 1
1 866511 866511 C/CCCCT 1 0.44186 0.462963 0.980392 0.534483 0.735294
1 866519 866519 T/C 0 0 0 0 0 0.225
1 866523 866523 T/C 0 0 0 0 0 0.216216
1 871334 871334 G/T 1 0.54386 0.525 1 0.538462 1

经过拆分后可变为以下六个文件:

chr start   end allele  D190531P1-180244WS-1_L3.bam
1 819917 819917 A/G 1
1 861630 861630 G/A 1
1 863124 863124 G/T 1
1 863138 863138 A/C 0
1 866319 866319 G/A 1
1 866511 866511 C/CCCCT 1
1 866519 866519 T/C 0
1 866523 866523 T/C 0
1 871334 871334 G/T 1
chr start   end allele  D190531P1-180244WS-F-1_L3.bam
1 819917 819917 A/G 1
1 861630 861630 G/A 0.6
1 863124 863124 G/T 1
1 863138 863138 A/C 0
1 866319 866319 G/A 1
1 866511 866511 C/CCCCT 0.44186
1 866519 866519 T/C 0
1 866523 866523 T/C 0
1 871334 871334 G/T 0.54386
chr start   end allele  D190531P1-180244WS-M-1_L3.bam
1 819917 819917 A/G 1
1 861630 861630 G/A 0.4
1 863124 863124 G/T 0.462366
1 863138 863138 A/C 0.557895
1 866319 866319 G/A 1
1 866511 866511 C/CCCCT 0.462963
1 866519 866519 T/C 0
1 866523 866523 T/C 0
1 871334 871334 G/T 0.525
chr start   end allele  D190531P1-180245WS_L3.bam
1 819917 819917 A/G 1
1 861630 861630 G/A 1
1 863124 863124 G/T 1
1 863138 863138 A/C 0
1 866319 866319 G/A 1
1 866511 866511 C/CCCCT 0.980392
1 866519 866519 T/C 0
1 866523 866523 T/C 0
1 871334 871334 G/T 1
chr start   end allele  D190531P1-180246WS_L3.bam
1 819917 819917 A/G 1
1 861630 861630 G/A 0.4
1 863124 863124 G/T 0.358025
1 863138 863138 A/C 0.648352
1 866319 866319 G/A 0.979167
1 866511 866511 C/CCCCT 0.534483
1 866519 866519 T/C 0
1 866523 866523 T/C 0
1 871334 871334 G/T 0.538462
chr start   end allele  DYDFA-381-1.bam
1 819917 819917 A/G 0
1 861630 861630 G/A 0
1 863124 863124 G/T 0
1 863138 863138 A/C 0
1 866319 866319 G/A 1
1 866511 866511 C/CCCCT 0.735294
1 866519 866519 T/C 0.225
1 866523 866523 T/C 0.216216
1 871334 871334 G/T 1

具体命令如下:

head -n 1 ddd.tsv |awk -F"\t" '{for(i=5;i<=NF;i++){sub(".bam",".bed",$i);printf $i"\n";}}'|perl -ne 'chomp;$n++;print "cat ddd.tsv|awk -F\"\\t\" '\''BEGIN{OFS=\"\\t\"}{print \$1,\$2,\$3,\$4,\$".($n+4)."}'\'' > $_\n";'|bash

类似地,对于一个多样本vcf文件,我们要拆分成多个单个样本的vcf文件,则可这样处理:

sed -n '/#CHROM/p' All.vcf|awk -F"\t" '{for(i=10;i<=NF;i++){printf $i"\n";}}'|perl -ne 'chomp;$n++;print "(awk '\''/^##/{print}!/^##/{exit}'\'' All.vcf; sed '\''/^##/d'\'' All.vcf |awk -F\"\\t\" '\''BEGIN{OFS=\"\\t\"}{print \$1,\$2,\$3,\$4,\$5,\$6,\$7,\$8,\$9,\$".($n+9)."}'\'') > $_.vcf\n";'|bash

更多讨论,欢迎关注公众号

34c971cffaf7473f59f9e47de5bea462.pnga65840c559f97818d708cd4f4ca6223d.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值