2014-10-17 16 views
2

喜的長度我有一個表,看起來像這樣:grep的行與3

chr10 84890986  84891021  2  17.5 2  93  0  61  48  2  48  0  1.16 GA 
chr10 84897562  84897613  2  25.5 2  100  0  102  50  49  0  0  1  AC 
chr10 84899819  84899844  2  12.5 2  100  0  50  0  0  52  48  1  GT 
chr10 84905282  84905318  6  5.8  6  87  6  54  80  19  0  0  0.71 AAAAAC 
chr10 84955235  84955267  2  16  2  100  0  64  50  0  0  50  1  AT 
chr10 84972254  84972288  2  17  2  93  0  59  2  0  47  50  1.16 GT 
chr10 85011399  85011478  3  25.7 3  80  12  63  58  1  40  0  1.06 GAA 
chr10 85011461  85011525  3  20.7 3  87  6  74  39  0  60  0  0.97 GAG 
chr10 85014721  85014841  5  23.8 5  78  8  66  0  69  0  29  1  TTCCC 
chr10 85021530  85021701  5  38.4 5  84  13  53  74  0  24  0  0.85 AAGAG 
chr10 85045413  85045440  3  9  3  100  0  54  66  33  0  0  0.92 CAA 
chr10 85059334  85059364  5  6  5  92  0  51  20  3  0  76  0.92 ATTTT 
chr10 85072010  85072038  2  14  2  100  0  56  50  50  0  0  1  CA 
chr10 85072037  85072077  4  10  4  84  10  55  25  22  0  52  1.47 ATCT 
chr10 85084308  85084338  6  5  6  91  0  51  83  13  3  0  0.77 CAAAAA 
chr10 85096597  85096640  3  14.7 3  95  4  79  69  30  0  0  0.88 AAC 
chr10 85151154  85151190  6  6.5  6  87  12  51  0  11  0  88  0.5  TTTCTT 
chr10 85168255  85168320  4  16.2 4  100  0  130  50  0  49  0  1  AGGA 
chr10 85173155  85173184  2  14.5 2  100  0  58  48  0  0  51  1  TA 
chr10 85196836  85196861  2  12.5 2  100  0  50  52  48  0  0  1  AC 
chr10 85215511  85215546  2  17.5 2  100  0  70  51  48  0  0  1  AC 
chr10 85225048  85225075  2  13.5 2  100  0  54  51  48  0  0  1  AC 
chr10 85242322  85242357  2  17.5 2  93  0  61  0  2  48  48  1.16 TG 
chr10 85245934  85245981  4  11  4  79  20  51  27  2  0  70  0.99 ATTT 
chr10 85249139  85249230  5  18.8 5  88  6  116  0  60  0  39  0.97 TTCCC 
chr10 85251100  85251153  5  11  5  97  2  92  0  0  37  62  0.96 GTTTG 
chr10 85268725  85268752  4  6.8  4  100  0  54  0  25  0  74  0.83 CTTT 
chr10 85268767  85268798  4  7.8  4  100  0  62  0  0  22  77  0.77 TTTG 
chr10 85269189  85269239  6  8.8  6  79  16  54  84  2  12  2  0.8  AAAAGA 
chr10 85330217  85330253  2  18  2  100  0  72  0  0  50  50  1  TG 
chr10 85332256  85332314  4  15  4  82  7  75  70  1  27  0  0.97 AAGA 
chr10 85337969  85337996  2  13.5 2  100  0  54  0  0  48  51  1  TG 
chr10 85344795  85344957  2  75.5 2  83  12  198  45  4  3  45  1.42 TA 
chr10 85349732  85349765  5  6.8  5  93  6  59  84  15  0  0  0.61 AAAAC 
chr10 85353082  85353109  5  5.4  5  100  0  54  0  22  18  59  1.38 CTGTT 

我想提取所有行與有3個,只有3中的最後一列字符。我嘗試到現在是這樣的:

grep -E "['ACTG']['ACTG']['ACTG']{1,3}$" 

但是這給了我一切,從3和大於3。我嘗試了許多不同的組合,但似乎沒有給我我想要的東西。有任何想法嗎?

+0

您的預期輸出是什麼? – 2014-10-17 10:36:14

回答

4

如果您想嘗試一下awk,你可以這樣做:

awk '$NF~/\<...\>/' file 
chr10 85011399  85011478  3  25.7 3  80  12  63  58  1  40  0  1.06 GAA 
chr10 85011461  85011525  3  20.7 3  87  6  74  39  0  60  0  0.97 GAG 
chr10 85045413  85045440  3  9  3  100  0  54  66  33  0  0  0.92 CAA 
chr10 85096597  85096640  3  14.7 3  95  4  79  69  30  0  0  0.88 AAC 

它將測試,如果最後一個字段$NF有3個字符...
這個正則表達式還可以:awk '$NF~/^...$/'

或者如果你需要確切的字符。 (PS這需要awk 4.x中,或使用開關的--re間隔)

awk '$NF~/^[ACTG]{3}$/' file 

使用grep

grep -E " [ACTG]{3}$" file 
chr10 85011399  85011478  3  25.7 3  80  12  63  58  1  40  0  1.06 GAA 
chr10 85011461  85011525  3  20.7 3  87  6  74  39  0  60  0  0.97 GAG 
chr10 85045413  85045440  3  9  3  100  0  54  66  33  0  0  0.92 CAA 
chr10 85096597  85096640  3  14.7 3  95  4  79  69  30  0  0  0.88 AAC 

你需要的空間,最後一列中分離,並{3}得到3個,只有3個字符。

2

您必須grep " ['ACTG']['ACTG']['ACTG']$"" ['ACTG']{1,3}$"
目前,你正在吝嗇3至5'ACTG'。
此外,報價是不必要的['ACTG']的意思是「匹配任何[]」之間的任何5個字符'ACTG,只是grep " [ACTG]{1,3}$"

請務必使用一個分隔符的左部(空間' ',標籤\t如果是製表符分隔,單詞邊界\b\W)。
如果您的線條都與[ACTG]+結束,你甚至可以只grep -E "\W.{,3}$"

+0

運行此命令:'grep -E「[ACTG] {1,3} $」'我找到了許多命中的路。它在最後一場擊中兩個或更多的所有線。 – Jotne 2014-10-17 10:37:01

+0

@Jotne是的,你必須在之前添加空格/製表符/邊界。已編輯 – fredtantini 2014-10-17 10:39:42

+0

嗯,我嘗試了所有的選擇,但他們不給我任何回報。我究竟做錯了什麼? – 2014-10-17 12:22:28

2

如果你想打印最後一列中正好有三個字符的行,那麼你可以使用下面的grep命令。

grep -E " [ACTG]{3}$" 

[ACTG]{3}匹配給定列表中的三個字符。

1

,你可以做到這一點的另一種方法是用awk:

$ awk '$NF ~ /^[ACTG][ACTG][ACTG]$/' file 
chr10 85011399  85011478  3  25.7 3  80  12  63  58  1  40  0  1.06 GAA 
chr10 85011461  85011525  3  20.7 3  87  6  74  39  0  60  0  0.97 GAG 
chr10 85045413  85045440  3  9  3  100  0  54  66  33  0  0  0.92 CAA 
chr10 85096597  85096640  3  14.7 3  95  4  79  69  30  0  0  0.88 AAC 

這將打印,其最後一個字段完全匹配的字符「A」 3都行,「C」,「T」或「G 」。

0

當我正在尋找的答案我自己,我發現了Perl的正則表達式的工作效率更高:

這樣做這筆交易:grep -P '\t...$'方式更緊湊的代碼。

$ cat roi_new.bed | grep -P "\t...$"                        

chr10 81038152  81038182  3  9.7  3  92  7  51  30  0  0  70  0.88 TTA 
chr10 81272294  81272320  3  8.7  3  100  0  52  0  30  69  0  0.89 GGC 
chr10 81287690  81287720  3  10  3  100  0  60  66  33  0  0  0.92 CAA 
1

2小時晚,但此是在AWK
單程這可以針對不同的長度和字段可以容易地編輯。

awk 'length($NF)==3' file