我有一个制表符分隔的文件,格式如下(多列):
#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
$