提取字符串模式

时间:2014-10-14 09:35:04

标签: awk sed grep

我有一个看起来像这样的文件:

chr1    156706559   rs8658  A   C,G 370.29  PASS    AC=1,1;AF=0.500,0.500;AN=2;DB;DP=19;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;MLEAC=1,1;MLEAF=0.500,0.500;MQ=56.74;MQ0=0;POSITIVE_TRAIN_SITE;QD=19.49;VQSLOD=6.27;culprit=FS;EFF=3_prime_UTR_variant(MODIFIER||123|c.*123A>C|RRNAD1|protein_coding|CODING|NM_001142560.1|7)  GT:AD:DP:GQ:PL  1/2:0,7,12:19:99:503,293,272,210,0,183
chr10   22839463    rs10047326  C   A,T 202.29  PASS    AC=1,1;AF=0.500,0.500;AN=2;DB;DP=10;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;MLEAC=1,1;MLEAF=0.500,0.500;MQ=60.00;MQ0=0;POSITIVE_TRAIN_SITE;QD=20.23;VQSLOD=10.48;culprit=FS;EFF=intron_variant(MODIFIER|||c.792+125G>T|PIP4K2A|protein_coding|CODING|NM_005028.4|7)    GT:AD:DP:GQ:PL  1/2:0,6,4:10:99:317,127,109,190,0,178
chr10   75673731    rs2227566   C   G,T 735.29  PASS    AC=1,1;AF=0.500,0.500;AN=2;DB;DP=33;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;MLEAC=1,1;MLEAF=0.500,0.500;MQ=55.90;MQ0=0;QD=22.28;VQSLOD=6.01;culprit=FS;EFF=splice_region_variant(LOW|||c.630C>G|PLAU|protein_coding|CODING|NM_001145031.1|6)   GT:AD:DP:GQ:PL  1/2:0,8,25:33:99:913,734,710,179,0,110
chr12   54805753    rs1922254   G   C,T 404.66  PASS    AC=1,1;AF=0.500,0.500;AN=2;DB;DP=18;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;MLEAC=1,1;MLEAF=0.500,0.500;MQ=55.34;MQ0=0;QD=22.48;VQSLOD=5.61;culprit=FS;EFF=splice_region_variant(LOW|||c.219C>G|ITGA5|protein_coding|CODING|NM_002205.2|1) GT:AD:DP:GQ:PL  1/2:0,4,14:18:67:540,434,422,106,0,67
chr15   50150903    rs7497350   C   A,T 3655.29 PASS    AC=1,1;AF=0.500,0.500;AN=2;DB;DP=140;Dels=0.00;FS=0.000;HaplotypeScore=1.8136;MLEAC=1,1;MLEAF=0.500,0.500;MQ=60.00;MQ0=0;POSITIVE_TRAIN_SITE;QD=26.11;VQSLOD=10.96;culprit=FS;EFF=3_prime_UTR_variant(MODIFIER||1488|c.*1488G>T|ATP8B4|protein_coding|CODING|NM_024837.3|28)    GT:AD:DP:GQ:PL  1/2:0,62,78:140:99:4121,2349,2187,1772,0,1553
chr16   11678403    rs8054918   T   C,G 283.29  PASS    AC=1,1;AF=0.500,0.500;AN=2;DB;DP=18;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;MLEAC=1,1;MLEAF=0.500,0.500;MQ=60.00;MQ0=0;QD=15.74;VQSLOD=10.55;culprit=FS;EFF=intron_variant(MODIFIER|||c.-6+1599A>G|LITAF|protein_coding|CODING|NM_004862.3|1)  GT:AD:DP:GQ:PL  1/2:0,9,9:18:99:407,181,160,226,0,208
chr16   78503259    rs2738676   G   A,C 166.31  PASS    AC=1,1;AF=0.500,0.500;AN=2;DB;DP=9;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;MLEAC=1,1;MLEAF=0.500,0.500;MQ=60.00;MQ0=0;QD=18.48;VQSLOD=10.91;culprit=QD;EFF=intron_variant(MODIFIER|||c.717+36610G>A|WWOX|protein_coding|CODING|NM_001291997.1|7)   GT:AD:DP:GQ:PL  1/2:0,3,6:9:80:279,181,172,98,0,80
chr17   4205297 rs1866174   C   A,T 189.29  PASS    AC=1,1;AF=0.500,0.500;AN=2;DB;DP=12;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;MLEAC=1,1;MLEAF=0.500,0.500;MQ=47.61;MQ0=0;POSITIVE_TRAIN_SITE;QD=15.77;VQSLOD=3.80;culprit=MQ;EFF=intron_variant(MODIFIER|||c.149+5019G>T|UBE2G1|protein_coding|CODING|NM_003342.4|2) GT:AD:DP:GQ:PL  1/2:0,5,7:12:87:307,202,187,105,0,87

想提取" EFF = ....."从每一行开始,在上面的例子中,所需的输出是

EFF=3_prime_UTR_variant
EFF=intron_variant
EFF=splice_region_variant

上面的输出是前三行。

我尝试了什么。

grep -no 'EFF="[^"]*"' file.txt

它没有用。

请帮助

4 个答案:

答案 0 :(得分:2)

随意尝试:

grep -Po 'EFF=[^(]*' file.txt

输出:

EFF=3_prime_UTR_variant
EFF=intron_variant
EFF=splice_region_variant
EFF=splice_region_variant
EFF=3_prime_UTR_variant
EFF=intron_variant
EFF=intron_variant
EFF=intron_variant

grep -Po 'EFF=\K[^(]*' file.txt
3_prime_UTR_variant
intron_variant
splice_region_variant
splice_region_variant
3_prime_UTR_variant
intron_variant
intron_variant
intron_variant

答案 1 :(得分:2)

grep -o "EFF=\w*" /root/testSO

给出:

EFF=3_prime_UTR_variant
EFF=intron_variant
EFF=splice_region_variant
EFF=splice_region_variant
EFF=3_prime_UTR_variant
EFF=intron_variant
EFF=intron_variant
EFF=intron_variant
  • -o仅打印输出中的匹配部分

EFF=\w*是正则表示匹配的EFF=后跟\w*所代表的任何单词字符(toz A到Z 0到9或_)表示最后一个类(\w)重复0次或更多次

编辑后注意: 第一个答案使用-n命令行选项在输出上添加数字,只是修复OP命令而不考虑整个问题。感谢@ChrisMae指出来。

答案 2 :(得分:1)

awk可以帮到你。这个命令:

awk 'match($0, /EFF=([^(]+)/, arr) { print arr[1]}' file.txt

将提取您可能正在寻找的变量。

3_prime_UTR_variant
intron_variant
splice_region_variant

如果你真的想要EFF=部分;这个命令应该做(感谢@Tensibai)

awk 'match($0, /EFF=([^(]+)/, arr) { print "EFF="arr[1]}' file.txt

这给出了:

EFF=3_prime_UTR_variant
...

答案 3 :(得分:1)

grep -o 'EFF=[^(]*' input

应该