2013-08-27 19 views
0

我在這裏有一個問題。對你的幫助表示感謝。grep在linux模式(重複/發生超過n)

我有一個輸入文件如下(col 1是ID名稱,col 2包含一組值)。 我能否僅顯示出現「NN」出現等於或大於3的行?我想這可能可以使用grep命令完成(模式選項也許),但我不知道它是如何完成的。

輸入文件:

ID_a NN;AT;AA;AC;NN 
ID_b NN;NN;NN;NN;NN 
ID_c NN;NN;AC;AC;NN 
ID_e NN;AG;NN;NN;AC 
ID_f AA;TT;CG;AA;TA 

所需的輸出文件

ID_b NN;NN;NN;NN;NN 
ID_c NN;NN;AC;AC;NN 
ID_e NN;AG;NN;NN;AC 

回答

1

grep 'NN.*NN.*NN' < input.file

A的特徵列表中here

.*是指任何數量的字符重複任意的時代。它匹配神經網絡之間的東西。

+0

由於相當多!你解決了我的問題! =) – amine

+0

沒問題。樂意效勞! – dcaswell

+0

@胺如果這解決了你的問題,那麼請接受答案。 –

0

這將做到這一點:

grep -E '(NN.*){3,}' input.txt 

你可以用任何你想要的重複的最小數量的替代3

0
$ awk 'gsub(/NN/,"&")>=3' file 
ID_b NN;NN;NN;NN;NN 
ID_c NN;NN;AC;AC;NN 
ID_e NN;AG;NN;NN;AC 

或者如果你喜歡:

$ awk -F'NN' 'NF>=4' file 
ID_b NN;NN;NN;NN;NN 
ID_c NN;NN;AC;AC;NN 
ID_e NN;AG;NN;NN;AC