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等(因此有一个条件需要担心,不需要查看所有数据)。所有这些的想法是,在重新设计以获得该示例时,你很可能会解决你的问题。谢谢你的明确解释。下次我会更小心的。当心!