在UNIX中,我想根据" DP"过滤我的3列文件。第3列中的值。 我只想获得DP值高于7的行。
A|49.14|AC=2;AF=0.500;AN=4;BaseQRankSum=1.380;DP=6;Dels=0.00;
T|290.92|AC=2;AF=1.00;AN=2;DP=8;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;
T|294.75|AC=6;AF=1.00;AN=6;DP=9;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;MLEAC=6;
我在这里使用" |"用于分隔我的三列
答案 0 :(得分:0)
这是一个简单的解决方案
$ echo "A|49.14|AC=2;AF=0.500;AN=4;BaseQRankSum=1.380;DP=6;Dels=0.00;
AC=6;AF=1.00;AN=6;DP=9;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;MLEAC=6;T|290.92|AC=2;AF=1.00;AN=2;DP=8;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;
MLEAC=6;" \
| awk '{dpVal=$0;sub(/.*DP=/, "", dpVal);sub(/;.*$/,"", dpVal); if (dpVal>7) print}'
<强>输出强>
T|290.92|AC=2;AF=1.00;AN=2;DP=8;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;
T|294.75|AC=6;AF=1.00;AN=6;DP=9;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;MLEAC=6;
这会生成每一行($ 0)的副本,剥离DP=
之前的所有内容,以及该字段的尾随;
字符之后的所有内容,只留下DP的值。测试该值,如果为true则打印整行(awk print
的默认操作是打印整行,但您可以告诉它打印任何您喜欢的内容,可能是print "Found it:" $0
或zillons变种。
修改强>
我想保留所有前53行,并将它们保存到我的Output.txt文件中。
是的,很容易,你走在正确的轨道上。使用awk很容易有多个条件处理文件中的不同部分或条件。试试这个:
awk 'FNR <= 53 {print}
FNR > 53 {
vpVal=$0;sub(/.*DP=/, "", dpVal);sub(/;.*$/,"", dpVal)
if (dpVal>7) print
}' File.vcf > Output.txt
(我没有要测试的文件,所以如果这不对,请告诉我。)
IHTH