AWK(如果其他条件无法正确打印)

时间:2018-12-10 19:33:35

标签: bash if-statement awk

我有以下testfile.txt

CHROM   POS     REF     ALT     DP      POS     N_ALLELES       N_CHR   {REF}   {ALT}
chr1    16495   G       C       252     16495   2               2       0.5     0.5
chr1    16719   T       A       189     16719   2               2       0.5     0.5
chr1    16841   G       T       521     16841   2               2       0.5     0.5
chr1    17626   G       A       124     17626   2               2       0.5     0.5
chr1    17697   G       C       63      17697   2               2       0.5     0.5
chr1    19004   A       G       13      19004   2               2       0.5     0.5
chr1    69270   A       G       20      69270   2               2       0       1
chr1    69511   A       G       240     69511   2               2       0       1
chr1    69897   T       C       28      69897   2               2       0       1

我正在尝试执行awk命令,以基于文本文件中的信息添加新列,但是以下代码仅在以下条件下起作用:

awk '{
    if ($9 == 0.5 && $10 == 0.5 && $7 == 2) {
        print $0"\thet";
    } else if (($9 == 0 && $10 == 0.5 && $7 == 3) || ($9 == 0.5 && $10 == 0 && $7 == 3)) {
        print $0"\t"het2;
    } else if (($9 == 0 && $10 == 1 && $7 == 2) || ($9 == 1 && $10 == 0 && $7 == 2)){
        print $0"\t"hom;
    }
}' testfile.txt 

我得到的输出如下:

chr1    16495   G       C       252     16495   2       2       0.5     0.5     het
chr1    16719   T       A       189     16719   2       2       0.5     0.5     het
chr1    16841   G       T       521     16841   2       2       0.5     0.5     het
chr1    17626   G       A       124     17626   2       2       0.5     0.5     het
chr1    17697   G       C       63      17697   2       2       0.5     0.5     het
chr1    19004   A       G       13      19004   2       2       0.5     0.5     het
chr1    69270   A       G       20      69270   2       2       0       1
chr1    69511   A       G       240     69511   2       2       0       1
chr1    69897   T       C       28      69897   2       2       0       1
chr1    120983  C       T       35      120983  2       2       0.5     0.5     het

有人可以解释一下为什么我的awk命令不起作用吗?

谢谢。

1 个答案:

答案 0 :(得分:3)

在提出更好的问题时,请注意评论者的建议。

在这种情况下,问题是引用,您有 print $0"\t"hom; 表示先打印整行,然后显示一个选项卡,然后显示变量hom(不存在)的内容。

像您的第一个print $0"\thom";一样将其更改为if将获得预期的结果。

您的第二个ifhet2有相同的问题

此外,如果您确实使用了制表符分隔符,则可以执行BEGIN {FS=OFS="\t"}并避免打印文字制表符,这将使您可以执行print $0,"het"$11="het";print;之类的操作似乎更具可读性。