我有以下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 :(得分:3)
在提出更好的问题时,请注意评论者的建议。
在这种情况下,问题是引用,您有
print $0"\t"hom;
表示先打印整行,然后显示一个选项卡,然后显示变量hom
(不存在)的内容。
像您的第一个print $0"\thom";
一样将其更改为if
将获得预期的结果。
您的第二个if
与het2
有相同的问题
此外,如果您确实使用了制表符分隔符,则可以执行BEGIN {FS=OFS="\t"}
并避免打印文字制表符,这将使您可以执行print $0,"het"
或$11="het";print;
之类的操作似乎更具可读性。