我正在使用以下命令将不规则格式的文本文件解析为10列的文本文件。
bcftools query -Hf 'CHC2432T\t%TYPE\t%CHROM\t%POS\t%REF\t%ALT\t%ANN[\t%DP\t%AD\t%GT]\n' test.vcf > ttest.txt
结果是一个tab-separated
文本文件,其中有10列,但第7列(命令中的ANN
)包含几个元素,它们是|像这个例子一样分开:
G|intron_variant|MODIFIER|C1orf222|ENSG00000142609|transcript|ENST00000493316|protein_coding
我想获得此|
分隔列的第4个元素,而不是上面的行(整个行)。
我正在尝试使用以下命令(添加到上述命令中)在AWK中做到这一点:
bcftools query -Hf 'CHC2432T\t%TYPE\t%CHROM\t%POS\t%REF\t%ALT\t%ANN[\t%DP\t%AD\t%GT]\n' test.vcf | awk '{printf }' | awk -F "|" '{print $1\t$2\t$3\t$4\t$5\t$6\t$7\t$8\t$9\t$10}' > results.txt
,但它不返回我想要的内容。你知道如何解决吗?
答案 0 :(得分:1)
您只需要将bcftools
的输出传递给执行此操作的单个awk
命令
bcftools query -Hf 'CHC2432T\t%TYPE\t%CHROM\t%POS\t%REF\t%ALT\t%ANN[\t%DP\t%AD\t%GT]\n' test.vcf |
awk -v FS="\t" '{ split($7, arr, "|"); $7 = arr[4] }1'
您可以进一步改进awk
命令,以进行完整性检查,以确保您不访问超出范围的数组成员