在linux中grep一个模式(重复/出现多于n)

时间:2013-08-27 04:32:15

标签: linux design-patterns grep repeat

我在这里有一个问题。非常感谢您的帮助。

我有一个如下输入文件(col 1是ID name,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

3 个答案:

答案 0 :(得分:1)

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

功能列表为here

.*是指重复任意次数的任意数量的字符。它匹配NN之间的东西。

答案 1 :(得分:1)

这样做:

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

您可以将3替换为您想要的最小重复次数。

答案 2 :(得分:1)

$ 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