查找文件中重复次序最多的序列

时间:2016-04-25 22:35:52

标签: awk grep

我有一个带有一些二进制序列[010101 ...]的文件,我希望在文件中获得最多生成的5位序列。

我的档案示例:

00010111000100100100100100100101110101010100011001010111011100010

我已经开始生成所有可能的序列,意味着如果我取前7位,我将得到以下序列:

00010 00101 01011

现在我正在寻找一种方法来计算文件中每个序列的出现次数。

请帮忙吗?

2 个答案:

答案 0 :(得分:2)

如果你正在使用perl,你可以选择这样的东西:

palette

输出:

use strict;
use warnings;

my $str = '00010111000100100100100100100101110101010100011001010111011100010';

# create list of all substrings of length 5
my @sequences = map { substr $str, $_, 5 } 0..length($str) - 5;

# build hash of counts for each substring
my %counts;
++$counts{$_} for @sequences;

# take key corresponding to the maximum value in counts
my ($max) = sort { $counts{$b} <=> $counts{$a} } keys %counts;

print "$max\n";

答案 1 :(得分:2)

使用 date image link subject 0 Thursday, May 5 img1.jpg bit.ly/asdf Unique subject line 1 1 Tuesday, May 17 img2.jpg bit.ly/zxcv Unique subject line 2 2 Monday, May 9 img3.jpg bit.ly/sdfg Unique subject line 3 和UNIX utils:

count.awk

awk

称之为:

{
    for(i=0;i<=length($0)-5;i++) {
        a[substr($0,i,5)]++
    }
}
END{for(i in a){print i, a[i]}}

这为您提供了所有5位序列的排序列表。如果您只想要最频繁,请使用:

awk -f count.awk input.file | sort -k2

顺便说一句,你也可以使用一个awk -f count.awk input.file | sort -k2 | tail -n1 | cut -d' ' -f1 脚本,但是通过上述工具的组合,你可以获得更大的灵活性。

为了完整性:

count.awk

awk
相关问题