使用基本的awk工具,假设我有一个文件,在“DP =”(第8列)之后和分号之前可以有任何数字。我想只保留这个数字为>的行。 10。
Chr1 26313 . G A,X 0 . DP=78;I16=28,38,10,0,2405,88631,356,12836,3960,237600,530,29234,1195,26039,199,4509;VDB=0.0000 PL:DP 12,0,
Chr1 26597 . G T,X 0 . DP=5;I16=29,27,0,10,2054,76598,389,15193,3360,201600,558,32130,1046,22598,238,5730;VDB=0.0000 PL:DP 48,0,
...etc..
如何使用awk提取数字,如果数字大于10,则只返回行?我想要的输出是(因为在另一行中,DP = 5 <10):
Chr1 26313 . G A,X 0 . DP=78;I16=28,38,10,0,2405,88631,356,12836,3960,237600,530,29234,1195,26039,199,4509;VDB=0.0000 PL:DP 12,0,
这是我到目前为止所做的...但我无法弄清楚如何提取字符串并与数字进行比较:
awk '( $5 ~ /[ACGT]/ && $8 ~ /^DP=/ && $10 !~ /^0/) {print $0}'
也许我可以把它分成两个awk命令?或者也许有一个技巧可以在一次通话中完成这一切?
很抱歉,如果它已被回答,但我环顾四周,无法弄清楚.. 我不想使用perl,gawk或其他任何东西..
编辑:我想我的例子太简单了......更新了它..
答案 0 :(得分:2)
设置字段分隔符并测试条件。向字段添加0可以消除尾随;
awk -F'=' '$2+0>10' file
您的示例输入行似乎是实际输入的截断版本。因此,保持其余条件不变,您可以添加以下检查:
awk '$5~/[ACGT]/ && $8~/^DP=/ && $10!~/^0/{split($0,tmp,/[=;]/);if(tmp[2]>10) print}' file