从制表符分隔的命令输出中分离出由管道分隔的列的元素

时间:2019-09-27 08:33:21

标签: awk

我正在使用以下命令将不规则格式的文本文件解析为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

,但它不返回我想要的内容。你知道如何解决吗?

1 个答案:

答案 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命令,以进行完整性检查,以确保您访问超出范围的数组成员