我有一个带有一些二进制序列[010101 ...]的文件,我希望在文件中获得最多生成的5位序列。
我的档案示例:
00010111000100100100100100100101110101010100011001010111011100010
我已经开始生成所有可能的序列,意味着如果我取前7位,我将得到以下序列:
00010 00101 01011
现在我正在寻找一种方法来计算文件中每个序列的出现次数。
请帮忙吗?
答案 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