這裏有一個簡單的解決方案
$ 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的值。該值進行測試,如果真打印整條生產線(AWK print
的默認操作是打印整條生產線,但你可以告訴它來打印你喜歡的東西,也許變種print "Found it:" $0
或zillons。
編輯
我想保持所有的第一線53和完整,以及將它們保存到我的Output.txt的文件。
是的,很容易,你是在正確的軌道上。用awk是很容易有多個條件的過程d文件中的不同部分或條件。試試這個:
awk 'FNR <= 53 {print}
FNR > 53 {
vpVal=$0;sub(/.*DP=/, "", dpVal);sub(/;.*$/,"", dpVal)
if (dpVal>7) print
}' File.vcf > Output.txt
(我沒有一個文件來測試,所以讓我知道如果這是不正確的)。
IHTH
謝謝,它的偉大工程 - 但我需要給它添加另一個層面:我目前使用的命令是:AWK 'FNR> 53' File.vcf | awk的「{dpVal = $ 0 ; sub(/.* DP = /,「」,dpVal); sub(/;.*$/,「」,dpVal); if(dpVal> = 6)print}'> Output.txt正如你所看到的,我從第54行開始運行過濾器。我想保留所有前53行完好並保存到我的Output.txt文件中。我可以使用一個命令班輪嗎? – Roy 2014-09-15 15:41:57
@羅伊,看我的編輯,有幫助嗎?祝你好運。 – shellter 2014-09-16 16:07:02
我試過了:awk'FNR <= 55 {print}; FNR> 55 {vpVal = $ 0; sub(/.* DP = /,「」,dpVal); sub(/;.$$/,「」,dpVal); if(dpVal> = 6)print}'threePatients.vcf> Output.txt但是,雖然沒有錯誤消息 - 我只得到第一部分的工作,這意味着 - 我只是在Output.txt文件中獲得了55個標題行,該命令的其餘部分似乎不起作用。 (頭像-n 55 threePatients.vcf && awk'FNR> 55'threePatients.vcf | awk'{dpVal = $ 0; sub(/.* DP = /, 「」,dpVal); sub(/;.*$/,「」,dpVal); if(dpVal> = 6)print}')> threePatients.MinimalDP6.vcf – Roy 2014-09-17 14:50:00