使用不同的分隔符分割文件的不同列并仅打印其中的一部分

使用不同的分隔符分割文件的不同列并仅打印其中的一部分

我有一个制表符分隔的文件,格式如下(多列):

#CHROM  POS ID  REF ALT QUAL    FILTER  INFO    FORMAT  NORMAL
1   22  .   C   A   .   PASS    aa;bb;cc    ee:ff:rr:dd xx:vv:yy:zz
1   34  .   G   T   .   PASS    aa;bb;cc    ee:ff:rr:dd xx:vv:yy:zz
1   56  .   C   G   .   PASS    aa;bb;cc    ee:ff:rr:dd xx:vv:yy:zz

期望的输出:

1   22  C   A   .   zz  vv/yy   cc
1   34  G   T   .   zz  vv/yy   cc
1   56  C   G   .   zz  vv/yy   cc

答案1

您可以使用正则表达式作为字段分隔符来实现您想要的目的。假设:;是您提供的示例中字段 9 和 10 的子字段分隔符,下面是如何打印特定字段和子字段的示例:

$ awk -F'[\t;:]' '{ print $1,$2,$4,$5,$18, $10, $16, $22 }' file
1 1278229 C A . SSC=7 FREQ 40%

您当前对子字段的描述不清楚,您的示例输出甚至更不清楚,但您应该能够修改我的示例以获得您想要的输出。

更新:根据最终提供的输入,以下awk命令生成示例输出:

$ awk -v FS='[\t;:]' -v OFS='\t' 'NR > 1 { print $1, $2, $4, $5, $6, $18, $16"/"$17, $10 }' infile
1   22  C   A   .   zz  vv/yy   cc
1   34  G   T   .   zz  vv/yy   cc
1   56  C   G   .   zz  vv/yy   cc
$ 

相关内容