Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash AWK if else条件无法正确打印_Bash_If Statement_Awk - Fatal编程技术网

Bash AWK if else条件无法正确打印

Bash AWK if else条件无法正确打印,bash,if-statement,awk,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

我有以下
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命令不起作用吗


提前感谢。

请注意评论者关于形成更好问题的建议

在这种情况下,问题是引用,您必须
打印$0“\t”hom
这表示打印整行,一个选项卡,然后是不存在的变量
hom
的内容

将此更改为
print$0“\thom”
像您的第一个
if
一样将获得预期的结果

您的第二个
if
het2


另外,如果您真的在使用制表符分隔符,您可以执行
开始{FS=OFS=“\t”}
操作,避免打印文字制表符,这样您就可以执行
打印$0,“het”
$11=“het”之类的操作;印刷品看起来更可读

在第二种情况下,您似乎错误地引用了字符串
“het2”
。同上,
“hom”
@Cyrus我不明白为什么我已经关注了这个链接,而你却发布了这个链接。@kvantour谢谢你的注意。谢谢。当我给出最小的、完整的和可验证的帖子时,我怎么可能减少更多的代码呢?我没有注意到这个小错误。。。我很累。谢谢你的帮助。这里有足够的信息来获取你想要的,只是很多信息是不必要的,这就是为什么Minimal被突出显示的原因。示例和代码数量庞大,数据本身很难快速看到发生了什么。这里的理想问题可能不会提供一个样本,其中只包含所需的三列,工作if和未工作if,删除or等(因此有一个条件需要担心,不需要查看所有数据)。所有这些的想法是,在重新设计以获得该示例时,你很可能会解决你的问题。谢谢你的明确解释。下次我会更小心的。当心!