一个统计n次命中的脚本

roby on 08月 - 17 - 2009

工作中有一个这样的需求,在一堆01排列的固定长度的数字中找出n次命中即出现n个1的情况,人肉的方式肯定不行,因为排列组合的情况太多了,用正则是当然的,怎么用却一时没想出来,后来翻了grep命令的一些参数后,找到一个方法,算简洁高效:

file=youfile

cat $file| grep -oP “^0{0,20}10{0,20}10{0,20}”

-P代表使用正则,不多说

-o倒是第一次使用,代表输出符合规则的字符流,而不是整行,如“0101001010…” 只会输出前面满足条件的0101

到这里,其实距离目标就只差一点了,再启用一个管道和正则:

| grep -P “\w{22}”

整个脚本的意思便是:选出01文件的固定长度(或起始有用的长度)为22,出现两次1的情况,注意1出现的次数和{0,20}中的20,两者加起来应该是整个长度22

同理,可以完成出现3次,4次,n次1的情况

为了简化正则书写,还可以改写成这样:

cat $file | grep -oP “^0{0,20}(10{0,20}){2}” | grep -P “\w{22}” >targetfile

No Comments for this post

还没有评论。

Leave a comment

Name (required) Comment
Mail (required)
Website