awk正则表达式每N次出现一次

时间:2011-10-25 09:42:38

标签: regex awk pipe

我想更好地理解awk:我经常搜索正则表达式,很多时候我只对第N次出现感兴趣。我总是用管道做这个任务说:

awk '/regex/' file | awk 'NR%N==0' 

如何使用awk(或perl执行相同的任务而无需管道

在某些情况下,使用管道是计算效率最高的解决方案吗?

5 个答案:

答案 0 :(得分:3)

只计算出现次数并打印每隔一个N:

BEGIN { n=0 }
/myregex/ { n++; if(n==3) { n=0; print } }

答案 1 :(得分:3)

每三分之一:

awk '/line/ && !(++c%3)' infile

例如:

zsh-4.3.12[t]% cat infile
1line
2line
3line
4line
5line
6line
7line
8line
9line
10line
zsh-4.3.12[t]% awk '/line/ && !(++c%3)' infile
3line
6line
9line
zsh-4.3.12[t]% awk '/line/ && !(++c%2)' infile
2line
4line
6line
8line
10line

答案 2 :(得分:1)

试试这个:

awk '/yourRegex/{i++} i==N{print; exit;}' yourFile

这将只打印第N场比赛

哦,如果你需要每隔Nth

怎么样:

 awk '/yourRegex/{i++} (!(i%N) && i){print; i=0}' yourFile

答案 3 :(得分:1)

您可以使用多个条件,例如:

awk -v N=10 '/regex/ { count++ } count == N { N=0; print $0 }'

答案 4 :(得分:1)

awk '/regex/ { c=(c+1)%N; if(c==0) print}' N=3